2016-05-07 1 views
0
class Pledge < ActiveRecord::Base 
    belongs_to :user 
    validates :amount, :presence => true, :numericality => {:greater_than => 0} 
    validates :divisor, :presence => true, :numericality => {:greater_than => 0} 
    validates_presence_of :user_id 
    before_save :set_pay_this 
    after_save :set_pennies 


    def set_pay_this 
    self.pay_this = self.amount/self.divisor 
    end 

    def set_pennies 
    self.pennies = self.pay_this * 100 
    end 
end 

beforesaveが、これはうまく動作しますが、設定されたペニーはpledge.saveなぜこのafter_saveは機能しませんか?

答えて

1

後にはnilのままちょうどあなたがに値を割り当てるときafter_saveを呼び出しますがされて

def set_pennies 
    self.update_column(:pennies, self.pay_this * 100) 
    end 
にメソッドを保存した後に変更を支払い設定ペニーは一時的に一時的にオブジェクトに割り当てられ、永続的ではないオブジェクトを再度保存する必要があります。 self.saveを置くと無限ループになるので、レコードの保存時にコールバックをバイパスする更新カラムを使用する

1

何かを保存し、モデレートで使用し、呼び出されたときにメソッドを実行するときにAfter_saveが常に呼び出されるset_penniesしかし、何もしない、私も思うself.update_columnまたはupdate_allあなたが欲しいものを行う。

関連する問題