2012-01-06 67 views
1

Scala的好处之一就是您可以安全的方式,因此应用程序中不会出现未定义的值。然而,Mongo根本不安全。所以,我认为,Mongo的一种转换是很好的,以确保只有正确的值被保存(作为字符串)。我有这种类型的在我的斯卡拉:在Lift的记录框架中创建专门的字段

sealed trait Tribe 

object Tribe { 
    def fromString(s:String) = s match { 
    case "Earth Pony" => EarthPony 
    case "Pegasus" => Pegasus 
    case "Unicorn" => Unicorn 
    case "Alicorn" => Alicorn 
    case _ => throw new NoSuchElementException 
    } 
} 

case object EarthPony extends Tribe { 
    override def toString = "Earth Pony" 
} 

case object Pegasus extends Tribe { 
    override def toString = "Pegasus" 
} 

case object Unicorn extends Tribe { 
    override def toString = "Unicorn" 
} 

case object Alicorn extends Tribe { 
    override def toString = "Alicorn" 
} 

现在我想打一个场TribeField,我可以在一个MongoRecord类应用,以确保当我读了记录此转换完成后,或将其保存。

不幸的是,Lift的记录文档似乎很稀疏,到目前为止我还没有找到任何有关如何做到这一点的有用信息。也许这里有人可以给我一些提示?

回答

2

我很确定lift-record-mongodb使用lift-record字段实例通过Field.asJValue和Field.setFromJValue对JSON进行序列化/反序列化的能力。为了创建一个完全安全的Tribe Field,你需要创建自己的TypedField [部落]并实现这些方法以及设置和访问你的字段的其他抽象方法。我建议看看StringField或其他具体的Field类型之一,以了解如何做到这一点。

更简单的选择是扩展StringField本身并添加setTribe/asTribe方法。

如果您需要更多信息,特别是Lift的Mongodb集成,我建议您尝试Lift Google Group。维护代码的Tim Nelson通常会很快回答问题。

相关问题