如何使用 after_save 对 Rails 中的 JSON 个对象数据求和?

How to sum JSON objects data in Rails using after_save?

我将每日订单存储在 daily_orders table 中。在 table 中,我有 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)。

如何在保存记录后对所有对象的价格求和并使用 after_save 将其放入 total 列中?

ap来自awesome_print gem.

已解决

看完this article才找到思路。感谢 Sergio Tulentsev 向我指出 reduce 这个问题。这对我来说是全新的东西。

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


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

就这么简单

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

此外,您可能希望在 before_save 中执行此操作,而不是 after_save