2012-01-24 79 views
16

我有以下關係設置:時間戳上HABTM關係與ActiveRecord的

class Article < ActiveRecord::Base 
    has_and_belongs_to_many :authors 
end 

class Author < ActiveRecord::Base 
    has_and_belongs_to_many :articles 
end 

我注意到,雖然連接表articles_authors有時間戳,他們不創造一個新的關係時填充。例如:

Author.first.articles << Article.first 

重要的是我要跟蹤作者何時與文章關聯。 有沒有辦法可以做到這一點?

回答

14

rails guides.

拇指的簡單規則是,你應該建立一個的has_many:通過關係,如果你需要的關係模型作爲一個獨立的實體工作。如果你不需要對關係模型做任何事情,可以更簡單地設置has_and_belongs_to_many關係(儘管你需要記住在數據庫中創建連接表)。

如果您需要驗證,回調或加入模型上的額外屬性,則應該使用has_many:through。

class Article < ActiveRecord::Base 
    has_many :article_authors 
    has_many :authors, :through => :article_authors 
end 

class Author < ActiveRecord::Base 
    has_many :article_authors 
    has_many :articles, :through => :article_authors 
end 

class ArticleAuthor < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :author 
end 

如果仍不能與結構工作,然後,而不是使用數組推,用創建。

Author.first.article_authors.create(:article => Article.first) 
+3

謝謝!創建單獨的關係模型的作品。我不認爲存儲時間戳足以保證一個單獨的模型。 – deadkarma

+1

這是否意味着articles_authors表需要重命名爲article_authors? –

+0

@TonyZito這是正確的。 – Gazler