为什么这是一个无限循环? ActiveRecord的

时间:2010-06-10 21:14:04

标签: ruby activerecord model

class Account < ActiveRecord::Base
  after_update :give_user_credit, :on => :update 

  def give_user_credit
    credit = User.current_user.credit + 3.8
    User.current_user.update_attribute(:credit, credit)
  end
end

当我使用此服务器时,服务器挂起,当我在完全重启后回到应用程序时,我的信用额度为1000英镑。

这是怎么回事......

谢谢:D

2 个答案:

答案 0 :(得分:6)

在我看来,每次更新记录时都要设置:give_user_credit callback

但是由于回调更新了记录,然后它再次触发回调,这将继续... ...

答案 1 :(得分:1)

您也可以使用此私有方法:

model.credit = 10
model.send(:update_without_callbacks)