跳过after_update回调

时间:2009-08-17 19:27:07

标签: ruby-on-rails ruby callback

我有一个使用after_update记录更改的模型。有一种情况我想在不激活此日志记录机制的情况下对模型进行更改。有没有办法将参数传递给after_update,或者一起跳过它?

我想要一个很好的解决方案,如果有更好的方法,我愿意删除after_update。

4 个答案:

答案 0 :(得分:3)

我会按照建议的方法将模型添加到模型中,但是会在更新后编写一个方法来帮助设置和清除标记。 e.g。

def without_logging_changes_to(model)
  # store current value of the flag so it can be restored
  # when we leave the block
  remembered_value = model.log_update
  model.log_update = false
  begin
    yield
  ensure
    model.log_update = remembered_value
  end
end

然后使用它:

without_logging_changes_to my_model do
  my_model.update_attributes(updates)
end

答案 1 :(得分:0)

您可以在模型中添加类似log_last_update的布尔值,并在after_update回调中检查它。

答案 2 :(得分:0)

class MyModel < ActiveRecord::Base

  after_update :do_something

  attr_accessor :should_do_something



  def should_do_something?
    should_do_something != false
  end

  def do_something
    if should_do_something?
      ...
    end
  end

end


y = MyModel.new
y.save! # callback is triggered

n = MyModel.new
n.should_do_something = false
n.save! # callback isn't triggered

答案 3 :(得分:0)

在Rails 2中,您可以使用私有ActiveRecord方法

update_without_callbacks
create_without_callbacks

可以通过send方法调用它们:

# Update attributes on your model
your_model.some_attribute = some_value

# Update model without callbacks
your_model.send(:update_without_callbacks)