Order
has_many
OrderItem
のモデルがあります。 OrderItem
belongs_to
Product
およびOrder
。ActiveRecordの複数の照会結果を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)
これはあなたにこのようになりますハッシュを与える:
私は質問を理解するのに苦労しています - 指定された場所と日のすべての注文を1つの注文に合計したいですか? –
@FredWillmoreいいえ、私は指定された日にすべての場所のすべての注文を合計したい –