2015-12-06 59 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