鉴于规范的例子:
class Post < ActiveRecord::Base
has_many :comments
end
class Comments < ActiveRecord::Base
belongs_to :post
end
我想返回所有评论为X或更少的帖子的范围(即ActiveRecord::Relation
);如果它解决了我的问题,请使用Active Record Query Interface,Arel或其他内容。
伪代码:
scope :quiet, lambda { |n| where(comments: { maximum: n }) }
我知道这可以通过简单的Enumerable#select
在Ruby中完成。最好是在数据库上计算,因为实际上只能有一个模型满足谓词。
答案 0 :(得分:1)
这个范围怎么样:
scope :quiet, ->(n) { where("(SELECT COUNT(*) FROM comments WHERE post_id = `posts`.id) < ?", n) }
它将在所有数据库端完成。它不使用连接,因此您可以根据需要实际更新这些帖子记录
答案 1 :(得分:1)
你可以这样做......
Post.joins(:comments).group("posts.id HAVING count(comments.id) > 0")
它不是完全的,但它肯定会起作用