我在我的应用程序中使用restful_authentication.我正在使用rake任务创建一组默认用户,但每次运行任务时都会因为与我的用户模型关联的观察者而发送激活电子邮件.我在创建用户时设置激活字段,因此不需要激活.
任何人都知道在运行rake任务时绕过观察者的简单方法,以便在我保存用户时不会发送电子邮件?
谢谢.
Rails 3.1最终附带了API:http: //api.rubyonrails.org/v3.1.0/classes/ActiveModel/ObserverArray.html#method-i-disable
ORM.observers.disable :user_observer # => disables the UserObserver User.observers.disable AuditTrail # => disables the AuditTrail observer for User notifications. # Other models will still notify the AuditTrail observer. ORM.observers.disable :observer_1, :observer_2 # => disables Observer1 and Observer2 for all models. ORM.observers.disable :all # => disables all observers for all models. User.observers.disable :all do # all user observers are disabled for # just the duration of the block end
ORM
例如,哪里可以ActiveRecord::Base
您可以为用户模型添加一个访问器,例如"skip_activation",不需要保存,但会在会话中持续存在,然后检查观察者中的标志.就像是
class User attr_accessor :skip_activation #whatever end
然后,在观察者中:
def after_save(user) return if user.skip_activation #rest of stuff to send email end
作为观察者的标志,我喜欢定义一个名为"disabled"的类访问器,所以它如下所示:
class ActivityObserver < ActiveRecord::Observer observe :user # used in tests to disable the observer on demand. cattr_accessor(:disabled) end
我把它作为敏感回调中的一个条件
def after_create(record) return if ActivityObserver.disabled # do_something end
我只是在需要时打开旗帜
ActivityObserver.disabled=true
另一个你可以尝试(rails 3)
config.active_record.observers = :my_model_observer unless File.basename($0) == 'rake'