0
我有一個帖子模型,通過標記有很多標籤。 讓我們說:如何通過關聯獲取has_many的所有項目
@posts = Post.followed_by(@user)
我想@posts的所有標籤。
我可以像做:
@posts.each do |post|
@tags << post.tags
end
我怎麼能做到這一點的更有效的方法?
我有一個帖子模型,通過標記有很多標籤。 讓我們說:如何通過關聯獲取has_many的所有項目
@posts = Post.followed_by(@user)
我想@posts的所有標籤。
我可以像做:
@posts.each do |post|
@tags << post.tags
end
我怎麼能做到這一點的更有效的方法?
試試這個:
Tag.joins(:taggings).where(taggings: {post_id: @posts.map(&:id)})
如果@posts
是關係(不是數組),可以簡化您的查詢:
Tag.joins(:taggings).where(taggings: {post_id: @posts})
的感謝!這兩個選項都可以工作 你能解釋一下這些查詢嗎? – 2012-04-15 18:00:00
你想讓我解釋什麼?順便說一句,如果兩者都在工作,則使用第二個。第一個導致兩個SQL查詢,因爲它提取'@ posts'中每個帖子的id,然後使用它們發出另一個查詢標籤的查詢。第二個問題發出一個查詢(id不會傳遞給應用程序來創建anoter查詢),因此速度更快。 – jdoe 2012-04-15 18:07:32