我找不到rails中特定回调的非常好的介绍。
基本上我正在处理两个模型:
我正在使用before_update模型来做一些基本的数学运算:
class Order < ActiveRecord::Base
accepts_nested_attributes_for :line_items
before_update :do_math
protected
def do_math
self.req_total = self.line_items.sum(:total_price)
end
req_total是订单的总价值,当用户更新我需要添加line_items的total_price所需的金额时。我究竟做错了什么?我的逻辑无法读取新提交的total_price。
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
查看您的日志。 sum方法从数据库中执行SQL求和。在这种情况下,它可能无法正常工作,因为子模型(line_items)成员可能尚未保存到数据库。
作为替代方案,请尝试
self.req_total = 0
line_items.each{|item|self.req_total += item.total_price}
PS。 ActiveRecord关联的sum方法与枚举,常规数组等的求和方法不同.ActiveRecord sum方法实际上是calculate(:sum)方法。