如何使用 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
。
我将每日订单存储在 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
。