我考虑过使用观察者或回调。
什么时候应该使用观察者?
F.e.您可以执行以下操作:
# User-model
class User << AR
after_create :send_greeting!
def send_greeting!
UserNotifier.deliver_greeting_message(self)
end
end
#observer
class UserNotifier << AR
def greeting_message(user)
...
end
end
或者你可以创建一个观察者并让它观察用户何时被创建......
你推荐什么?
最佳答案
要记住的一个非常重要的区别与 Milan Novota 的回答有关,即 ActiveRecord 上的回调能够取消被调用的操作和所有后续回调,而观察者则不能。
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
观察者只能观察,不能干预。
关于ruby-on-rails - 观察者与回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531514/