sql - rails : How to sum and display total quantity by category

标签 sql ruby-on-rails ruby ruby-on-rails-4

我想按类别汇总总数量。

如何计算并显示它们?

显示图像如下; (A项和C项是同一类别)

order A
  shop A

    name: item A
    category: 1
    quantity: 2

    name: item B
    category: 2
    quantity: 3

    name: item C
    category: 1
    quantity: 4

    <Total>     # I'd like to know how to calculate and display
    category 1: 6
    category 2: 3

如果您能给我任何建议,我将不胜感激。

模型

class Order < ActiveRecord::Base
    has_many :shops
end

class Shop < ActiveRecord::Base
    belongs_to :order
    has_many :items
end

class Item < ActiveRecord::Base
    belongs_to :shop
    has_one :order, autosave: false, through: :shop
end

schema.rb

ActiveRecord::Schema.define(version: 20160610051929) do

  create_table "items", force: :cascade do |t|
    t.string   "name"
    t.integer  "category"
    t.integer  "quantity"
    t.integer  "shop_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "orders", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "shops", force: :cascade do |t|
    t.string   "name"
    t.integer  "order_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

orders_controller.rb

class OrdersController < ApplicationController
  def show
    @orders = Order.find(params[:id])
  end
end

view/orders/show.html.erb

<%= render @orders %>

view/orders/_order.html.erb

<%= order.name %><br>

<% order.shops.each do |shop| %>

    <%= shop.name %><br>

    <% shop.items.each do |item| %>

        name: <%= item.name %><br>
        category: <%= item.category %><br>
        quantity: <%= item.quantity %><br>
        <br>

    <% end %>

<% end %>

如果您能告诉我如何计算和显示总计,我将不胜感激。

最佳答案

你可以这样做:

Item.group(:category).sum(:quantity)

您将获得如下所示的哈希构建:

{ category1 => sum_quantity, ...  }

您只需迭代此哈希即可显示结果。

 <% shop.items.each do |item| %>
    name: <%= item.name %><br>
    category: <%= item.category %><br>
    quantity: <%= item.quantity %><br>
    <br>

<% end %>
<% shop.items.group(:category).sum(:quantity).each do |category, sum| %>
       Category <%=category%> : <%= sum %><br>
<% end %>

关于sql - rails : How to sum and display total quantity by category,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37748480/

相关文章:

sql - 获取跨多个列的最小非零值

sql - 如何查找键重复但所有列中不重复的行?

sql - 将一列复制到 oracle db 中同一个表中的另一列。我需要指定哪些数据去哪里吗?

mysql - 将 MySQL 表列类型从 INT 更改为 BIGINT

ruby-on-rails - 如何处理更新操作中的错误(使用Twitter gem)

ruby-on-rails - 使用 ruby​​/savon 生成 wsse-security 的 DigestValue 元素

ruby - 如何为模块类设置默认属性值

ruby-on-rails - Rails 4 + Rspec + 设计 : undefined method 'env' in controller specs for sign_in a user

ruby-on-rails - Capybara::ElementNotFound:无法找到文件字段 "file"

mysql - select rows mysql order by 自定义值 从表底部到表顶部