2011-10-02 107 views
1

在我的問題,我需要的職位,每個屬於類別,但我也希望每個職位都在第二類。這樣,一個職位可以在「新聞」,另一個職位可以在「體育」,但他們都將在「一切」。目前我的協會是這樣的:Mongoid協會不工作

class Article 
    include Mongoid::Document 
belongs_to :category 
belongs_to :home_category, :class_name => 'Category' 
end 
class Category 
    include Mongoid::Category 
has_many :articles 
end 

目前正常的article.category工作正常。但是article.home_category在Article對象上設置,但不會與類別對象相互作用。所以,如果我設置article.home_category=category它可以工作,但如果我做category.articles,我會得到[]。 任何想法爲什麼?

回答

1

因此,事實證明,我的問題是,我使用before_save設置類別,偶爾事實證明,當它在未被執行的文章上被調用時效果不好。我通過將before_save切換到after_create過濾器解決了問題,然後它工作正常! 最後Mongoid協會沒有問題,問題是我。

1

您設置關係的方式,它是Article和Category之間的1:n關係......這意味着您無法爲文章分配多個類別。

你應該將其更改爲:M關係,請參閱:

http://mongoid.org/docs/relations/referenced/n-n.html

class Article 
    include Mongoid::Document 
    has_and_belongs_to_many :categories 
end 

class Category 
    include Mongoid::Category 

    has_and_belongs_to_many :articles 
end 

或者你可以爲Mongoid嘗試acts_as_taggable:

http://abhishiv.tumblr.com/post/3623498128/introducing-acts-as-taggable-for-mongoid

有與C的兩個關係您在示例代碼中使用的參數可能不是一個好主意。

+0

我曾嘗試HABTM關係,但它沒有工作,我會再試一次。 –

+0

另外我意識到,我需要確保它始終處於一切,同時被允許改變另一個。 –

+0

我剛剛測試過,和之前一樣,文章有類別,但所有類別都沒有文章。奇怪的是,其他類別都有他們的文章。難道是我在使用保存過濾器來添加所有類別? –