我有一個模型使用after_update
來記錄更改。有一種情況是我想在不激活此日誌記錄機制的情況下對模型進行更改。有沒有辦法將參數傳遞給after_update,還是一起跳過?跳過after_update回調
我想要一個很好的解決方案,並且如果有更好的方法去除它,我願意刪除after_update。
我有一個模型使用after_update
來記錄更改。有一種情況是我想在不激活此日誌記錄機制的情況下對模型進行更改。有沒有辦法將參數傳遞給after_update,還是一起跳過?跳過after_update回調
我想要一個很好的解決方案,並且如果有更好的方法去除它,我願意刪除after_update。
我會按照建議在模型中添加一個布爾值的方法,但會寫一個方法來幫助在更新後設置和清除標誌。例如
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
您可以添加一個布爾值到類似log_last_update
的模型,並檢查after_update回調。
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
在Rails 2,你可以使用專用的ActiveRecord方法
update_without_callbacks
create_without_callbacks
他們可以通過發送方法被調用:
# Update attributes on your model
your_model.some_attribute = some_value
# Update model without callbacks
your_model.send(:update_without_callbacks)
這就是我所做的,但它感覺ha。。我想現在有沒有辦法使用鐵軌 – Ori 2009-08-19 19:11:20
如果你想出了一個更優雅的解決方案,請讓我知道。謝謝。 – mikej 2009-08-20 07:35:45