2010-11-16 86 views
0

這裏是我的模型:Mongoid多對多,這是正常的嗎?

class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    references_many :roles, :stored_as => :array, :inverse_of => :users 
    ... 
end 

class Role 
    include Mongoid::Document 

    field :name, :type => String 

    references_many :users, :stored_as => :array, :inverse_of => :roles 
    ... 
end 

我先創建通過種子,耙分貝的角色:種子。我的種子文件包含:

puts '*** Add default roles' 
[ 
    { :name => 'User' }, 
    { :name => 'Artist' } 
].each do |h| 
    Role.create(h) 
end 

角色已成功創建。然而,當我添加一個角色給用戶,我做的:

foobar = User.first 
foobar.roles.create(:name => 'User') 

我注意到兩兩件事:

1)它增加了爲用戶採集的參考作用。

2)它在角色集合中創建第3個角色。

這有點奇怪,因爲現在我有3個角色:用戶,藝術家和用戶。第二個用戶集合有一個user_ids引用,其中包含foobar的id。

這是正常的嗎?

回答

1

我覺得你更想做的事:

foobar = User.first 
foobar.roles << Role.find(:name => 'User') 
foobar.save 

這種方式未創建角色對象,但引用添加到已經存在的記錄。

+0

是的,它看起來像它做對了。偶然的,你知道如何刪除引用後添加「<<」? – 2010-11-21 09:22:47

+0

@Christian那麼,這是一個很好的。我不是經驗豐富的Mongoid用戶,但我會嘗試'foobar.roles.find(:name =>'User')。destroy'。在我看來,這兩個實體之間的聯繫並不存在,並且不會破壞整個角色。但是在生產之前很久就要進行測試。 :) – pestaa 2010-11-21 09:56:24

+0

嗯。剛剛嘗試過.destroy,顯然它刪除了Role集合中的完整角色。謝謝你的嘗試,但:-) – 2010-11-21 10:14:43