2011-03-25 50 views
1

我有一個奇怪的問題。我是新來mongoid,所以我無法確定它是否是我或mongoid過錯......我展示的代碼也許是最好的解釋(減去場/驗證的/ etc。)mongoid references_and_referenced_in_many

class User 
    include Mongoid::Document 
    embeds_one :profile, :class_name => "UserProfile" 
    references_and_referenced_in_many :roles 
end 

class UserProfile 
    include Mongoid::Document 
    embedded_in :user 
end 

class Role 
    include Mongoid::Document 
    references_and_referenced_in_many :users 
end 

與以下關聯,當我創建這些對象,像這樣的情況下...

user = User.new :username => 'username', 
       :email => '[email protected]', 
       :password => 'password' 
user.build_profile :first_name => 'John', 
        :last_name => 'Doe', 
        :birthday => Date.new(1980, 1, 1) 
user.roles << Role.new(:name => 'Administrator') 
user.save 

...我可以User.firstuser

查看此用戶...我可以User.first.profile和查看個人資料

...我可以查看角色user.roles但我不能User.first.roles查看它們。

另一個奇怪的是user.roles.count AND User.first.roles.count都返回0,即使當我查看user.roles,它返回[#<Role _id: 4d8c0173e1607cdeae00002c, name: "Administrator", user_ids: [BSON::ObjectId('4d8c0173e1607cdeae00002a')]>]。 (User.first.roles返回一個空陣列)

這看起來像一個錯誤。

回答

2

使用:自動保存=>真正的關係協會

references_and_referenced_in_many :roles, :autosave => true 

,或者你可以明確地保存role

role = Role.new(:name => 'Administrator') 
user.roles << role 
role.save 
user.save 

這是由於mongoid.2.0.0.rc變化。 1 +列出here

關係關聯不再 自動保存當父關係爲 時創建。之前保存的新文件 有一個references_many 或references_one關聯加載 將保存關係保存在它的第一個 保存。爲了得到這個 功能回來了,一:自動保存=> 真正的選項必須被提供給 宏(僅適用於 references_many和references_one)

+0

嗯..還是不節能。也user.roles是一個數組,所以沒有保存方法。 – brewster 2011-03-25 08:19:53

+0

自動保存應該已經工作了,反正我編輯了上面的答案..希望它可以幫助 – zoras 2011-03-25 09:31:03

+0

是的,這是有效的,但我好奇爲什麼自動保存不是。我使用rc7,所以我升高到rc8,但具有相同的結果...也許自動保存不能用於references_and_referenced_in_many,只是references_many&references_one獨立? – brewster 2011-03-25 18:23:28