创建两次执行foobar的回调

时间:2011-09-21 20:33:29

标签: ruby-on-rails-3

我的模型看起来像这样:

  after_create :foobar
  after_update :foobar

  def foobar
    update_attributes(:foo => 'bar')
  end

每当我创建一个对象。它调用foobar(after_create回调)。但它也会自动触发after_update回调。

基本上,当我创建一个对象时,它会调用foobar两次。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:2)

after_create中,您正在调用update_attributes()来触发after_update回调。

基本上你要两次打电话。您需要弄清楚程序的正确流程是什么,并使foobar只调用一次。现在,您编写的代码按设计执行。

一个建议是使用before_[action]属性来修改传入对象中的字段。这样,对象只会被保存一次。你编写它的方式,新对象会被保存两次 - 一次创建时,一次通过update_attributes更新。

我看到这是示例代码,但我不确定如何在after_update中,因为您明确地进行了另一次更新,这是如何在无限循环中完成的。如果您发布实际代码,可能会给出更好的答案。