2011-07-23 42 views
3

我正在學習電梯和mongodb。我遇到了以下問題。爲了簡單起見,我會繞過一些代碼。這裏是代碼:如何使用MongoListField返回列表

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 

我可以存儲在MongoDB中的ObjectId數據。但MongoListField不返回一個列表。爲什麼?如何將它用作List。

我嘗試添加類型大小寫列表[OjbectId]或列表[字符串],但沒有運氣。

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

遇到錯誤: java.lang.ClassCastException:com.cosiin.model.User $ likePostList $不能轉換到scala.collection.immutable.List

我想我使用MongoListField錯誤辦法。但我不知道如何使用它。
任何人都可以幫忙嗎?謝謝

+1

我解決了它。使用value屬性將返回我想要的。 val list:List [ObjectId] = this.likePostList.value –

+0

你也可以使它更加安全,將ObjectId更改爲實際的模型類。在你的情況下喜歡? – Lukasz

回答

0

您在電梯記錄中聲明的字段是字段對象,而不是字段中包含的實際值。爲了訪問的實際值,你需要調用:

this.likePostList.get 

,或者如果字段是可選

this.likePostList.valueBox 

它返回一個scala.Option狀物體。

如果你想起來了,這使得很有道理的,因爲你實際上聲明likePostList當你鍵入是MongoListField一個實例:

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

,而不是

val likePostList: List[ObjectId] = ... 

有沒有魔法Scala可以自動將它轉換爲List[ObjectId]。它與以下相同:

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.在較舊版本的Lift中,get被稱爲is