2

私はそれを持ってUserhas_many messagesます。クエリを作成する必要があります

'Get me all users who's (message.opened == false) count < 3'

現在、私は を使用しUser.all、すべてのユーザーを繰り返し処理し、手動で数えています。これはあまり効率的ではなく、1 つのクエリですべて実行できることは理解していますが、SQL/ActiveRecord は初めてなので、ここで助けが必要です。ありがとう

4

4 に答える 4

0

ここにあなたの問題の解決策があります

User.includes(:messages).group("users.id").where("messages.opened = 0").having("count(messages.id) < 3")

他にできることは、このためのスコープを作成することです

scope :not_opened_less_three_count, includes(:messages).group("users.id").where("messages.opened = 0").having("count(messages.id) < 3")

そして、次のように必要な場所ならどこでも使用できます

User.not_opened_less_three_count
于 2012-11-28T19:13:59.553 に答える