2015-12-06 60 views
1

我有一个物品控制器num1 num2和sum字段。我想在edit.html.erb编辑num1或num2时更新数据库中的总和字段。在用户输入的时间计算的总和场,我已经使用回调如何在编辑现有字段时更新“sum”字段?

before_create :set_sum_value 

private 
def set_sum_value 
    self.sum = (self.num1 + self.num2) 
    true 
end 

我应该在更新NUM1时使用什么回调,号码2,使之自动计算?

回答

0

你可以把这段代码在你的模型:

after_validation :set_sum_value 

    def set_sum_value 
     self.sum = num1 + num2 
    end  
0

不要使用回调,你不需要它。覆盖设置器num1num2,以便每次更改该值时,总和都会自动更新。

class Model 

    def num1=(value) 
    update_sum 
    write_attribute(:num1, value) 
    end 

    def num2=(value) 
    update_sum 
    write_attribute(:num2, value) 
    end 

    private 

    def update_sum 
    self.sum = num1.to_i + num2.to_i 
    end 

end 

在这里使用回调不是合适的选择。

  • 回调仅在创建时执行。因此,如果您更改num1num2,并且您致电.sum,则会返回错误的值。
  • 当对象的ActiveRecord更新
  • 回调不执行回调被滥用

还要注意,在update_sum我被迫机器人NUM值整数。事实上,你可以设置一个零值num1,这将导致崩溃,当您尝试计算总和,除非你保证nil被转换为0