Rails:限制Active Record连接查询

时间:2015-05-25 16:08:44

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

鉴于用户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

有效,但速度很慢。

2 个答案:

答案 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")