Ich möchte ein Active Record Modell für Rspec Test erstellen.Callback bei Create Rails überspringen
Allerdings hat dieses Modell Callbacks, nämlich: before_create und after_create Methode (ich denke, diese Methoden werden Callbacks nicht Validierung genannt, wenn ich nicht falsch liege).
Gibt es eine Möglichkeit, ein Objekt zu erstellen, ohne die Rückrufe auszulösen?
Einige frühere Lösungen, die ich versucht habe/nicht für meinen Fall arbeiten:
Update-Methode:
update_column und andere Update-Methoden wird nicht funktionieren, weil ich ein Objekt erstellen möchte und ich kann Verwenden Sie keine Update-Methoden, wenn das Objekt nicht existiert.
Factory Girl und nach Körperbau:
FactoryGirl.define do
factory :withdrawal_request, class: 'WithdrawalRequest' do
...
after(:build) { WithdrawalRequest.class.skip_callback(:before_create) }
end
end
Ausfall/Fehler: nach (: build) {WithdrawalRequest.class.skip_callback (: before_create)}
NoMethodError: nicht definierte Methode `skip_callback 'für die Klasse: Klasse
Skip callbacks on Factory Girl and Rspec
überspringen Rückruf
WithdrawalRequest.skip_callback(:before_create)
withdrawal_request = WithdrawalRequest.create(withdrawal_params)
WithdrawalRequest.set_callback(:before_create)
Ausfall/Fehler: WithdrawalRequest.skip_callback (: before_create)
NoMethodError: nicht definierte Methode `_before_create_callbacks' für #
How to save a model without running callbacks in Rails
Ich habe auch versucht
WithdrawalRequest.skip_callbacks = true
Was nicht funktioniert.
---------- ----------- EDIT
Meine Fabrik-Funktion bearbeitet wird:
after(:build) { WithdrawalRequest.skip_callback(:create, :before, :before_create) }
Meine before_create Funktion sieht wie folgt aus :
class WithdrawalRequest < ActiveRecord::Base
...
before_create do
...
end
end
---------- EDIT 2 -----------
I veränderte die before_create auf eine Funktion, so dass ich es referenzieren. Ist beides eine bessere Praxis?
class WithdrawalRequest < ActiveRecord::Base
before_create :before_create
...
def before_create
...
end
end
Vielen Dank für die Antwort.Aber ich habe immer noch Fehler (es macht immer noch den Rückruf) Ich habe die Frage mit der before_create do-Funktion hinzugefügt. Weißt du, was diesen Fehler verursachen könnte? (Bitte beachten Sie die Bearbeitung für weitere Informationen) – seokhoonlee