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 set支付这个工作得很好,但是在pledge之后,套装便士保持为零。
答案 0 :(得分:1)
只需在保存方法后更改为
def set_pennies
self.update_column(:pennies, self.pay_this * 100)
end
after_save正在调用,但是当您在便士中分配值时,它只是临时分配给非永久对象,您必须再次保存该对象。 如果你把self.save然后会有一个无限循环所以使用更新列,当你保存记录时将绕过回调
答案 1 :(得分:1)
After_save总是在保存任何东西时调用,使用审核,当它被调用时执行方法set_pennies但是什么也没有,我也认为self.update_column或update_all做你想要的。