如何通过关联获取has_many的所有项目

时间:2012-04-15 17:34:24

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个帖子模型,通过标记有很多标签。 让我们说:

@posts = Post.followed_by(@user)

我想获得@posts的所有标签。

我可以用以下的方式做到:

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

我怎样才能以更有效的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

试试这个:

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

如果@posts是关系(不是数组),则可以简化查询:

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