2016-06-10 1 views
1

Я хотел бы суммировать общее количество по категориям.Rails: Как суммировать и отображать общее количество по категориям

Как я могу рассчитать и отобразить их?

Отображаемое изображение выглядит следующим образом; (пункт А и С той же категории)

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 

вид/заказы/show.html.erb

<%= render @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 %> 

Было бы понятно, если бы вы могли дать мне, как рассчитать и дисплей в итоге.

+0

Вы можете использовать SQL, подобный http://stackoverflow.com/questions/17957723/ruby-on-rails-query-with-sum-and-group –

+0

Пробовали ли вы группу и сумму для этого? –

+0

Как правило, эти суммы доступны с 'Item.where (категория: 1) .sum (: quantity)', но вы должны думать об одном запросе, чтобы получить все суммы, чтобы избежать множественных вызовов SQL. –

ответ

2

Вы могли бы сделать что-то вроде этого:

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

вы получите Hash построить так:

{ category1 => sum_quantity, ... } 

вы просто должны итерацию по этому Hash, чтобы отобразить результат.

<% 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 %> 
+0

Благодарим вас за ответ, @oliviergg. Где я должен добавить этот код? И не могли бы вы дать мне, как отображать? Извините за вопрос новичков. – SamuraiBlue

+0

Только что обновил мой ответ. – oliviergg

+0

Благодарим вас за обновление, @oliviergg. Оно работает! – SamuraiBlue

Смежные вопросы