在我的seeds.rb
文件中,我正在创建Job类的多个对象。 Job有这些回调:
class Job < ActiveRecord::Base
...
after_create :notify_by_email, :notify_by_text
...
end
我希望避免在开发和暂存中生成这些电子邮件或短信(开发当前用户LetterOpener,并且在浏览器中弹出这些电子邮件很麻烦。我只是希望能够运行rake db:seed
和忽略终端)。在StackOverflow的另一个问题中,我发现我可以使用它:
Job.skip_callback(:create, :after, :notify_by_email)
所以我尝试以下方法在一行中跳过两个回调:
Job.skip_callback(:create, :after, { :notify_by_email, :notify_by_text })
然而,这引发了一个错误。我检查了ActiveSupport API,但它没有表明我正在尝试做的事情,所以我采取了这个:
Job.skip_callback(:create, :after, :notify_by_email)
Job.skip_callback(:create, :after, :notify_by_text)
有没有办法更好地使用回调散列的上述尝试?
答案 0 :(得分:2)
你可能会混淆skip_before_filter(它在控制器中是类似的表兄弟)。
您可以通过添加:if或:unless选项
来跳过after_createafter_create :notifiy_by_email, if: :new_user
def new_user
# logic to determine if user is new
end
我还建议您将电子邮件发送到控制器并避免整个问题。
答案 1 :(得分:1)
我认为你要找的是reset_callbacks
Job.reset_callbacks(:create)
请参阅此http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/reset_callbacks