Ich verbessere vorhandenen Code aus Rogue 1.1.8
auf 2.0.0
und lift-mongodb-record
ab 2.4-M5 to 2.5
.
Ich habe Schwierigkeiten beim Schreiben MongoCaseClassField
, das eine Scala-Aufzählung enthält, bei der ich wirklich Hilfe gebrauchen könnte.
Beispielsweise,
object MyEnum extends Enumeration {
type MyEnum = Value
val A = Value(0)
val B = Value(1)
}
case class MyCaseClass(name: String, value: MyEnum.MyEnum)
class MyMongo extends MongoRecord[MyMongo] with StringPk[MyMongo] {
def meta = MyMongo
class MongoCaseClassFieldWithMyEnum[OwnerType <: net.liftweb.record.Record[OwnerType], CaseType](rec : OwnerType)(implicit mf : Manifest[CaseType]) extends MongoCaseClassField[OwnerType, CaseType](rec)(mf) {
override def formats = super.formats + new EnumSerializer(MyEnum)
}
object myCaseClass extends MongoCaseClassFieldWithMyEnum[MyMongo, MyCaseClass](this)
/// ...
}
Wenn wir versuchen, in dieses Feld zu schreiben, wird der folgende Fehler angezeigt:
Der implizite Wert für den Evidence-Parameter vom Typ com.foursquare.rogue.BSONType [MyCaseClass] .and (_. myCaseClass setTo myCaseClass) konnte nicht gefunden werden.
Früher funktionierte dies in Rogue 1.1.8, indem wir unsere eigene Version von verwendeten MongoCaseClassField
, wodurch die Methode #formats überschreibbar wurde. Aber diese Funktion war in 2.5-RC6 in der Lift-Mongodb-Aufzeichnung enthalten, also dachten wir, das sollte jetzt funktionieren?