Rails 5分组,总和并显示在视图中

时间:2018-01-08 17:36:22

标签: sql ruby-on-rails ruby activerecord

我在Rails 5中有两个模型并且使用Postgres:

class Sale < ApplicationRecord
attribute :total (among others)
   belongs_to :categorys
end  

class Category < ApplicationRecord
  attritubte :name (among others)
  has_many :sales
end

那么如何按类别获得销售组并总计每个类别的销售总额?以及如何在我的视图中显示它(在实例变量中)。例如,我想在我的视图中显示:

CategoryOne:总计$ 3000(结果可能是哈希,但我怎样才能在视图中显示它?

CategoryTwo:总计$ 4000

CategoryThree:总计$ 2200

依旧......

这是正确的rails方式查询(活动记录)?以及如何在视图中显示结果?感谢

2 个答案:

答案 0 :(得分:0)

您可以使用ActiveRecord的#sum来计算类别销售额的合并total

category = Category.last
category.sales.sum(:total)

要在视图中呈现销售总额,您可以执行以下操作:

在类别模型中:

# app/models/category.rb
class Category < ApplicationRecord
  def sales_total
    sales.sum(:total)
  end
end

在您的相关控制器操作中:

# app/controllers/categories_controller.rb
@categories = Category.includes(:sales)

并在相应的视图中:

<% @categories.each do |c| %>
  <%= "Category #{c.name}: Total $#{c.sales_total} %>
<% end %>

希望这有帮助!

答案 1 :(得分:0)

def sales_total_on(date)
  sales.where(date: date).sum(:total)
end

您可以将日期通过请求参数从表单传递给控制器​​。您可以使用select或datepicker。