查找具有任意两个关联ID的对象(Rails 4)

时间:2013-10-10 01:20:52

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

背景:帖子通过CommunityPosts拥有多个社区。我理解以下查询返回与这些community_ids中的任何一个相关联的帖子。

Post.joins(:communities).where(communities: { id: [1,2,3] })

目标:我想查询与数组中任意两个community_ids相关联的帖子。拥有社区1和2,社区1和3,或社区2和3。

编辑:请假设数组的长度未知。使用这一系列解释目的。它将是current_user.community_ids而不是[1,2,3]。

1 个答案:

答案 0 :(得分:0)

这将为您提供完全来自当前用户社区的任何两个关联的所有帖子:

Post.select("posts.*, count(distinct(communities.id))").joins(:communities).where("communities.id in (?)", current_user.community_ids).group("posts.id").having("count(distinct(communities.id)) = 2")

显然,要放宽限制,您需要将having子句中的条件更改为> =。