为什么这个after_save不起作用?

时间:2016-05-07 03:31:29

标签: ruby-on-rails-4

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之后,套装便士保持为零。

2 个答案:

答案 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做你想要的。