считать записи с условиями - PullRequest
1 голос
/ 03 августа 2011

У меня есть 2 модели: пользователь и активность

Отношение между пользователем и активностью:

class User < ActiveRecord::Base    
  has_many :activities, :through => :projects
end

Я хочу подсчитать всех пользователей, которые выполнили вход в течение последних 3 месяцев (last_sign_in_at) по крайней мере с 5 действиями Вот что у меня есть:

a=User.where(:admin => false)
a.joins(:activities).size

Как мне ограничить временные рамки и получить только те, у кого более 5 занятий? В конце я хочу вызвать .size, чтобы получить один результат (не массив). Спасибо.

1 Ответ

1 голос
/ 03 августа 2011

Вы должны использовать counter_cache (описано в документации для belongs_to), чтобы сохранить счет действий в таблице users.Тогда:

User.where(:admin => false).where("created_at >= ?", 3.months.ago).where("activities_count >= 5)

Это найдет всех пользователей, которые не являются администраторами, которые были созданы за время, большее или равное ("в пределах") последних 3 месяцев, которые имеют activities_count (это поле counter_cache) больше или равно 5 (моя интерпретация "5 +).

Звучит хорошо?:)

...