-1

我将每日订单存储在 daily_orders 表中。在该表中,我有total列和special_kitchen_orders列(类型:JSON)。

现在,当我在控制台中运行它时:

ap DailyOrder.first.special_kitchen_orders

我得到了这个:

[
    [0] {
         "name" => "pizza",
          "qty" => 1,
        "price" => 10
    },
    [1] {
         "name" => "burger",
          "qty" => 1,
        "price" => 20
    },
    [2] {
         "name" => "cake",
          "qty" => 1,
        "price" => 30
    }
]

我正在考虑使用after_save来计算所有对象价格的总和,但我不知道如何制作它。

在此示例中,total应为60(10 + 20 + 30)。

保存记录后如何汇总所有对象的价格并将其放入total列中after_save

注意ap来自awesome_print gem

解决了

看完这篇文章,我才发现了这个想法。感谢 Sergio Tulentsev 把这reduce件事指给我看。这对我来说是全新的事物。

def total(array)
  array.reduce(0) do |sum, num|
    sum += num
  end
end


total([1,2,3])
# => 6
4

1 回答 1

1

就这么简单

special_kitchen_orders.reduce(0) do |memo, order| 
  memo + order['qty'] * order['price']
end

此外,您可能想在 a 中执行此操作before_save,而不是after_save.

于 2015-10-29T08:30:05.927 回答