0

给出典型的例子:

class Post < ActiveRecord::Base
  has_many :comments
end

class Comments < ActiveRecord::Base
  belongs_to :post
end

我想返回ActiveRecord::Relation所有评论为 X 或更少的帖子的范围(即);如果可以解决我的问题,请使用Active Record Query InterfaceArel或其他方法。

伪代码:

scope :quiet, lambda { |n| where(comments: { maximum: n }) }

我知道这可以在 Ruby 中使用简单的Enumerable#select. 最好在数据库上计算,因为实际上只能有一个模型满足谓词。

4

2 回答 2

1

这个范围呢:

scope :quiet, ->(n) { where("(SELECT COUNT(*) FROM comments WHERE post_id = `posts`.id) < ?", n) }

它将在所有数据库端完成。它没有使用连接,因此您可以根据需要实际更新这些帖子记录

于 2013-02-14T19:33:33.737 回答
1

你可以做这样的事情..

Post.joins(:comments).group("posts.id HAVING count(comments.id) > 0")

它不完全是,但它肯定会工作

于 2013-02-14T20:03:04.283 回答