我在模型中定义了一个回调函数,如下所示:
在我的测试中,我想要使用
after_commit :method, on: [:create, :update]
在我的测试中,我想要使用
set_callback
方法禁用此回调。我该如何做? after_commit :method, on: [:create, :update]
set_callback
方法禁用此回调。我该如何做?set_callback
用于给模型添加回调函数:
http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/set_callback
我认为这里应该使用 skip_callback
:
http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/skip_callback
你可以这样调用它:SomeModel.skip_callback(:commit, :after, :method)
通常在测试工厂中使用,例如跳过被称为some_method
的before_save
方法:
factory :user do
after(:build) do |user|
user.class.skip_callback(:save, :before, :some_method)
end
end
SomeModel
的模型,您可以使用回调类型调用方法skip_callback
:SomeModel.skip_callback(:after_commit)
那么,您对SomeModel的记录所做的任何操作都将在没有您的after_commit回调的情况下完成。
文档:http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/skip_callback
after_commit
不起作用。我得到了错误:
NoMethodError: undefined method _after_commit_callbacks' for <Class:0x007fa81db97cc0>
- zauzajSomeModel.skip_callback(:after)
? - Caillou