2015-12-07 75 views
0

我已經創建模型,定製has_and_belongs_to_many協會:Mongoid,has_and_belongs_to_many,雙面協會

class Item 
    include Mongoid::Document 
    has_and_belongs_to_many :combinations, class_name: 'Item', inverse_of: :combinations 
end 

如果我有item1item2,當我做這樣的事情:

item1.combinations << item2 
item1.save 

item1.combinations # returns [<Item2>] 
item2.combinations # returns [] 

這意味着該協會是單方面。如何使這種關聯兩面?我錯過了什麼嗎?

回答

0

試試這個。我沒有測試它,但應該工作。

class Item 
    include Mongoid::Document 
    has_and_belongs_to_many :child_combinations, class_name: 'Item', inverse_of: :parent_combinations 
    has_and_belongs_to_many :parent_combinations, class_name: 'Item', inverse_of: :child_combinations 
end 

然後你就可以像這樣訪問

item1.child_combinations 
item2.parent_combinations 

我希望這是你所需要的。

+0

是否可以只使用一個'has_and_belongs_to_many'關聯? –

+0

不可能,因爲mongoid需要雙向關聯。你必須指定關係是如何建立的。所以如果你只是提到'has_and_belongs_to _many',mongoid會尋找在相關模型中指定的關係,如果它找不到,它就不會創建關係。 –

+0

而且你也不能在一個數組中組合父和子組合。你需要爲父母和孩子指定兩個不同的東西,否則它總是單方面的。 –