0

我正在使用Ruby on Rails 3.0.10,並且我想改進一些代碼(請繼續閱讀以獲取更多信息),該代碼使用:has_many :through從數據庫檢索數據協會。改進'has_many:through'關聯以檢索數據

在這個模型中,我有:

class Article < ActiveRecord::Base 
    has_many :category_relationships 

    has_many :categories, 
    :through => :category_relationships, 
end 

我想改善以下代碼(檢索文章分類對象「過濾」一些人利用where語句),因此遵循「的Ruby on軌做事「的方式:

@articles.category_relationships.where(:comment_id => @comment.id).map{ |category_relationship| category_relationship.article_category } 

如何\我應該怎麼辦呢?爲了改善上面的代碼,我可以在@articles.categories關聯上「工作」嗎?如果是這樣,怎麼樣?

回答

0

你能用下面的東西嗎?

@articles.categories.where(["category_relationships.comment_id = ?", 
          @comment.id]) 

如果您擔心DRYness,也許您可​​以提取模型的位置。

class Article < ActiveRecord::Base 
    has_many :category_relationships 

    has_many :categories, 
     :through => :category_relationships do 
    def has_comment(comment_id) 
     where(["category_relationships.comment_id = ?", comment_id]) 
    end 
    end 

end 

@articles.categories.has_comment(@comment.id) 
0

我認爲你需要嵌套has_many :throughArticleCategoryRelationship之間的關係。這是我曾經成功使用的一個插件,以實現您正在尋找的內容。

https://github.com/ianwhite/nested_has_many_through

This博客文章還討論了其他的方法。

+0

我「希望」\「喜歡」使用內置的Ruby on Rails功能。 – Backo