繁体   English   中英

跳过创建Rails的回调

[英]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'

跳过Factory Girl和Rspec的回调

跳过回调

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'

如何在不运行Rails中的回调的情况下保存模型

我也试过了

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM