2011-07-23 5 views
3

J'apprends l'ascenseur et le mongodb. J'ai rencontré un problème comme suit. Je vais contourner le code pour plus de simplicité. Voici le code:Comment utiliser MongoListField pour renvoyer une liste

object User extends User with MetaMegaProtoUser[User] { 

} 

class User extends MegaProtoUser[User] { 
    def meta = User 

    //record the post list that user like 
    object likePostList extends MongoListField[User, ObjectId](this) 

    def test() 
    { 
    val list: = this.likePostList 
    println(list.length) 
    } 
} 

error: value length is not a member of object User.this.likePostList 
this.likePostList.length 

Je peux stocker les données ObjectId dans MongoDB. Mais le MongoListField ne renvoie pas de liste. Pourquoi? Comment l'utiliser comme une liste.

J'essaie d'ajouter le cas de type à List [OjbectId] ou List [String] mais sans chance.

val list: List[ObjectId] = this.likePostList.asInstanceOf[List[Object]] 

Got erreur: java.lang.ClassCastException: com.cosiin.model.User $ likePostList $ ne peut pas être jeté à scala.collection.immutable.List

Je pense que je me sers MongoListField mauvais façon. Mais je ne sais pas comment l'utiliser.
Quelqu'un peut-il aider? Merci

+1

Je l'ai résolu. Utilisez l'attribut value pour retourner ce que je veux. liste de valeurs: List [ObjectId] = this.likePostList.value –

+0

Vous pouvez également rendre plus sûr le type en changeant ObjectId à votre classe de modèle réelle. Dans votre cas Like? – Lukasz

Répondre

0

Les champs que vous déclarez dans les enregistrements d'ascenseur sont des objets de champ, et non les valeurs réelles contenues dans le champ. Pour accéder à la valeur réelle que vous devez appeler:

this.likePostList.get 

ou si le champ est facultatif

this.likePostList.valueBox 

qui retourne un scala.Option comme objet.

Si vous pensez, cela fait beaucoup de sens parce que vous êtes en train de déclarer likePostList être une instance de MongoListField lorsque vous tapez:

object likePostList extends MongoListField[User, ObjectId](this) 

par opposition à

val likePostList: List[ObjectId] = ... 

il y a aucune magie Scala ne peut faire pour convertir automatiquement à List[ObjectId]. C'est la même chose que:

class Foo { 
    val bar = 3 
    object baz { val greeting = "hello" } 
} 

val foo = new Foo 
println(foo.bar) // prints 3 
println(foo.baz) // prints something like [email protected] 
println(foo.baz.greeting) // prints "hello" 

P.S. dans les anciennes versions de Lift, get a été appelé is.

Questions connexes