2016-05-10 9 views
0

Orderhas_manyOrderItemのモデルがあります。 OrderItembelongs_toProductおよびOrderActiveRecordの複数の照会結果を1つのカウントに組み合わせる方法は?

create_table "order_items", force: :cascade do |t| 
    t.integer "product_id" 
    t.integer "order_id" 
    t.decimal "unit_price", precision: 10, scale: 2 
    t.integer "quantity" 
    t.decimal "total_price", precision: 10, scale: 2 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.string "cat" 
end 

create_table "orders", force: :cascade do |t| 
    t.integer "location_id" 
    t.string "day" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.decimal "subtotal", precision: 12, scale: 3 
    t.decimal "total",  precision: 12, scale: 3 
    t.integer "role" 
    t.text  "notes" 
end 

は、いくつかの異なるLocation S /ユーザがあり、それぞれLocationは一日一Orderを持っています。私は、彼らがそれぞれ順に表示された場合、私は結合されたすべての場所から一日あたりの注文したすべての項目を表示できるようにしたいが、何私が持っていることはアイテムのレプリカを生成

@order = Order.where(location: @location, day: 'Wednesday') 
@order_items = @order.order_items 

によって各Locationのための製品と毎日を一覧表示することができます。各@order_itemsアレイの値の一部を「マージ」する方法はありますか?

水曜日に位置1のパンを注文し、水曜日に位置2のパンを3個注文すると、数量4のパンアイテムを1つしか持たないアレイを作成したいと思います。以下では、配列内のパンアイテム、毎日1つ。

@locations = Location.all 
@order = Order.where(location: @locations, day: 'Wednesday') 
@order_items = OrderItem.where(order: @order) 

私は、これは、配列を反復処理し、新しいものを作成することによって行うことができます実現し、それを行うためのより良いか、Railsの方法は何ですか?

OrderItem.joins(:order).group(:location_id).group(:day).sum(:quantity) 

これはあなたにこのようになりますハッシュを与える:

+0

私は質問を理解するのに苦労しています - 指定された場所と日のすべての注文を1つの注文に合計したいですか? –

+0

@FredWillmoreいいえ、私は指定された日にすべての場所のすべての注文を合計したい –

答えて

0

は、私はあなたがこのような何かをしたいと思います私は実際にあなたのように配列を使用することができます知らなかった

{[1, "Thursday"]=>4, [1, "Wednesday"]=>2} 

ハッシュインデックスですが、そこにあります。ハッシュキーとして機能する配列は、location_idとdayで構成されます。

関連する問題