2012-04-15 64 views
0

我有一個帖子模型,通過標記有很多標籤。 讓我們說:如何通過關聯獲取has_many的所有項目

@posts = Post.followed_by(@user) 

我想@posts的所有標籤。

我可以像做:

@posts.each do |post| 
    @tags << post.tags 
end 

我怎麼能做到這一點的更有效的方法?

回答

2

試試這個:

Tag.joins(:taggings).where(taggings: {post_id: @posts.map(&:id)}) 

如果@posts是關係(不是數組),可以簡化您的查詢:

Tag.joins(:taggings).where(taggings: {post_id: @posts}) 
+0

的感謝!這兩個選項都可以工作 你能解釋一下這些查詢嗎? – 2012-04-15 18:00:00

+0

你想讓我解釋什麼?順便說一句,如果兩者都在工作,則使用第二個。第一個導致兩個SQL查詢,因爲它提取'@ posts'中每個帖子的id,然後使用它們發出另一個查詢標籤的查詢。第二個問題發出一個查詢(id不會傳遞給應用程序來創建anoter查詢),因此速度更快。 – jdoe 2012-04-15 18:07:32

相關問題