[英]Skip callback on create Rails
我想为Rspec测试创建一个Active Record模型。
但是,这个模型有回调,即:before_create和after_create方法(我认为如果我没有错误,这些方法被称为回调而不是验证)。
有没有办法在不触发回调的情况下创建对象?
以前的一些解决方案我尝试过/不适合我的情况:
更新方法:
update_column和其他更新方法将无法工作,因为我想创建一个对象,当对象不存在时我不能使用更新方法。
工厂女孩和后建立:
FactoryGirl.define do
factory :withdrawal_request, class: 'WithdrawalRequest' do
...
after(:build) { WithdrawalRequest.class.skip_callback(:before_create) }
end
end
失败/错误:在(:build)之后{WithdrawalRequest.class.skip_callback(:before_create)}
NoMethodError:Class:Class的未定义方法`skip_callback'
跳过回调
WithdrawalRequest.skip_callback(:before_create)
withdrawal_request = WithdrawalRequest.create(withdrawal_params)
WithdrawalRequest.set_callback(:before_create)
失败/错误:WithdrawalRequest.skip_callback(:before_create)
NoMethodError:#的未定义方法`_before_create_callbacks'
我也试过了
WithdrawalRequest.skip_callbacks = true
哪个也行不通。
----------编辑-----------
我的工厂功能编辑为:
after(:build) { WithdrawalRequest.skip_callback(:create, :before, :before_create) }
我的before_create函数如下所示:
class WithdrawalRequest < ActiveRecord::Base
...
before_create do
...
end
end
----------编辑2 -----------
我将before_create更改为一个函数,以便我可以引用它。 这些都是更好的做法吗?
class WithdrawalRequest < ActiveRecord::Base
before_create :before_create
...
def before_create
...
end
end
根据参考答案:
FactoryGirl.define do
factory :withdrawal_request, class: 'WithdrawalRequest' do
...
after(:build) { WithdrawalRequest.skip_callback(:create, :before, :callback_to_be_skipped) }
#you were getting the errors here initially because you were calling the method on Class, the superclass of WithdrawalRequest
#OR
after(:build) {|withdrawal_request| withdrawal_request.class.skip_callback(:create, :before, :callback_to_be_skipped)}
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.