rails 3 group by和sum

dca*_*iro 13 ruby-on-rails ruby-on-rails-3

我有以下型号:

activity_types: id, name

activities: id, id_activity_type, occurrences, date (other fields)
Run Code Online (Sandbox Code Playgroud)

活动表存储活动按天发生的次数.但是现在我想向用户显示每个类型的活动按月发生了多少.

根据这篇文章得到了以下解决方案,似乎没问题:

Activity.all(:joins => :activity_types,
             :select => "activity_types.id, activity_types.name, SUM(activities.occurrences) as occurrences",
             :group => "activity_types.id, activity_types.name",
             :order => "activity_types.id")
Run Code Online (Sandbox Code Playgroud)

但这似乎有很多关于rails标准和rails API的代码说它已经被弃用了.

我发现以下解决方案非常简单:

Activity.sum(:occurrences).group(:activity_type_id)
Run Code Online (Sandbox Code Playgroud)

返回带有activity_type_id => occurrence 的哈希值.

我该怎么做以获得以下哈希:activity_type.name =>出现?

Mar*_*oda 15

如果原始查询有效,那么只需尝试使用Rails 3语法重写它:

Activity.joins(:activity_types)
  .select("activity_types.id, activity_types.name, SUM(activities.occurrences) as occurrences")
  .group("activity_types.id, activity_types.name")
  .order("activity_types.id")
Run Code Online (Sandbox Code Playgroud)