计算有条件的记录

时间:2011-08-03 05:13:57

标签: ruby-on-rails-3 conditional

我有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 个答案:

答案 0 :(得分:1)

您应该使用counter_cache(在the documentation for belongs_to中描述)来存储users表中的活动计数。然后:

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

这将找到非管理员的所有用户,他们是在过去3个月中具有activities_count的大于或等于(“在...内”)的时间创建的(这是{{1 }}} field)大于或等于5(我对“5 +”的解释。

听起来不错? :)