在Rails中回拨

时间:2010-02-17 21:47:33

标签: ruby-on-rails callback

我找不到rails中特定回调的非常好的介绍。

基本上我正在处理两个模型:

  1. 顺序
  2. 项目,(以订单形式嵌套)
  3. 我正在使用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。

    谢谢!

2 个答案:

答案 0 :(得分:0)

不确定您使用sum - 看起来就像在谈论Ruby时尝试使用SQL一样!

尝试How to sum array of numbers in Ruby?

希望有所帮助:)

答案 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)方法。