我的模型看起来像这样:
after_create :foobar
after_update :foobar
def foobar
update_attributes(:foo => 'bar')
end
每当我创建一个对象。它调用foobar(after_create
回调)。但它也会自动触发after_update
回调。
基本上,当我创建一个对象时,它会调用foobar两次。
我该如何防止这种情况?
答案 0 :(得分:2)
在after_create
中,您正在调用update_attributes()
来触发after_update
回调。
基本上你要两次打电话。您需要弄清楚程序的正确流程是什么,并使foobar
只调用一次。现在,您编写的代码按设计执行。
一个建议是使用before_[action]
属性来修改传入对象中的字段。这样,对象只会被保存一次。你编写它的方式,新对象会被保存两次 - 一次创建时,一次通过update_attributes
更新。
我看到这是示例代码,但我不确定如何在after_update
中,因为您明确地进行了另一次更新,这是如何在无限循环中完成的。如果您发布实际代码,可能会给出更好的答案。