2012-01-06 66 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通常會很快回答問題。

相關問題