鉴于用户has_many
朋友(自我加入)和has_many
帖子,请返回至少创建一个帖子的所有朋友的计数。
如果我们设置user = User.first
,那么user.friends
会返回被引用为“朋友”的所有用户。到user
:
user.friends.joins(:posts).count
返回与用户的朋友关联的所有帖子的计数。
我想返回至少有一个帖子关联的朋友的数量(可能是通过限制.joins查询返回的对象)。
user.friends.map {|f| f.posts.first.present? ? 1 : 0}.sum
有效,但速度很慢。
答案 0 :(得分:1)
这样的事情应该有效:
user.friends.joins("INNER JOIN posts ON posts.user_id = users.id").select(:id).distinct.count
有一个更好的方法可以通过一个请求来实现它,但是需要更详细的模型描述来构建它。
答案 1 :(得分:0)
user.friends.joins(:posts).select("users.id").group("users.id").having("count(posts.id) > 1")