rails 中 Observers中别调用与直接调用函数的区别

One really important distinction to keep in mind, which is related to Milan Novota's answer, is that callbacks on an ActiveRecord have the ability to cancel the action being called and all subsequent callbacks, where as observers do not.

class Model < ActiveRecord::Base before_update :disallow_bob def disallow_bob return false if model.name == "bob" end end class ModelObserver < ActiveRecord::Observer def before_update(model) return false if model.name == "mary" end end m = Model.create(:name => "whatever") m.update_attributes(:name => "bob") => false -- name will still be "whatever" in database m.update_attributes(:name => "mary") => true -- name will be "mary" in database

Observers may only observe, they may not intervene.


转自:

你可能感兴趣的:(rails 中 Observers中别调用与直接调用函数的区别)