0

標準的な例を考えると:

class Post < ActiveRecord::Base
  has_many :comments
end

class Comments < ActiveRecord::Base
  belongs_to :post
end

ActiveRecord::RelationX 以下のコメントを持つすべての投稿のスコープ (つまり) を返したいと思います。問題が解決する場合は、 Active Record Query InterfaceArel、または他の何かを使用してください。

擬似コード:

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

これは、Ruby で簡単に実行できることを認識していますEnumerable#select。実際には、述語を満たすモデルは 1 つしか存在しないため、データベースで計算することをお勧めします。

4

2 に答える 2

1

あなたはこのようなことをすることができます..

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

完全に機能するわけではありませんが、確実に機能します

于 2013-02-14T20:03:04.283 に答える
1

このスコープはどうですか:

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

それはすべてデータベース側で行われます。結合を使用していないため、必要に応じて実際にそれらの投稿レコードを更新できます

于 2013-02-14T19:33:33.737 に答える