背景:帖子通过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]。
答案 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子句中的条件更改为> =。