Rails在group_by查询中的额外列

时间:2015-04-17 13:45:19

标签: ruby-on-rails activerecord grouping

我的模特是这样的:

Product belongs_to Category
Product belongs_to OrderItem

我想选择某一天销售的产品的总价值,按类别分组:

@items = OrderItem.joins(:product => [:category]).where('order_items.sale_date = ?', 1.day.ago.strftime('%Y-%m-%d')).group(:'categories.name').sum(:total_value)

查询工作正常,返回一个包含类别名称和总值的数组。

我在结果中需要一些额外的列,比如类别的ID。我怎么能这样做?

由于

1 个答案:

答案 0 :(得分:1)

尝试以下方法获取一系列类别和相应的总和:

@items = OrderItem.joins(:product => [:category]).where('order_items.sale_date = ?', 
 1.day.ago.strftime('%Y-%m-%d')).group('categories.id').
 sum(:total_value).map {|k, v| {category: Category.find(k), total_value: v}}

现在,在视图中,您可以使用以下内容:

<% @items.each do |item| %>
 <p><%= item[:category].name %> - <%= item[:total_value] %></p>
<% end; %>