我的Order
模型has_many
OrderItem
。 OrderItem
belongs_to
Product
和Order
。
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
个/用户,每个Location
每天只有一个Order
。我可以列出每个Location
和每天
@order = Order.where(location: @location, day: 'Wednesday')
@order_items = @order.order_items
我希望能够显示每天从所有位置组合的每件商品,但是如果它们出现在每个订单中,我会生成商品的副本。有没有办法“合并”每个@order_items
数组中的某些值?
如果位置1在星期三订购1个面包而位置2在星期三订购3个面包,那么我想创建一个只有一个面包项目,数量为4的数组。我在下面给出了一个包含两个面包的数组数组中的项目,每天一个。
@locations = Location.all
@order = Order.where(location: @locations, day: 'Wednesday')
@order_items = OrderItem.where(order: @order)
我意识到这可以通过遍历数组并创建一个新数组来完成,但有更好的或Rails方式吗?
答案 0 :(得分:0)
我想你想要这样的东西:
OrderItem.joins(:order).group(:location_id).group(:day).sum(:quantity)
这将为您提供如下所示的哈希:
{[1, "Thursday"]=>4, [1, "Wednesday"]=>2}
我实际上不知道你可以使用一个数组作为哈希索引,但确实如此。用作散列键的数组由location_id和day组成。