Als ich versuchte, den Rückruf mit skip_callback und set_callback vorübergehend zu vermeiden, funktionierte set_callback nicht. Notieren Sie die Situation und die Problemumgehung zu diesem Zeitpunkt.
Ich möchte diesen Rückruf vorübergehend überspringen.
before_validation :func, on: :action
Implementiert mit skip_callback
und set_callback
.
skip_callback(:validation, :before, :func)
------------------------------------------
#Verarbeitung ausführen
------------------------------------------
set_callback(:validation, :before, :func)
Danach trat jedoch bei anderen Operationen ein Problem auf, und die Ursache wurde untersucht.
skip_callback
kann den konfigurierten Rückruf überspringen. Einmal ausgeführt, bleibt es jedoch die ganze Zeit übersprungen, sodass Sie set_callback
verwenden müssen, um es zurückzugeben.
Weil on :: action
nicht zurückgesetzt wurde.
Mit anderen Worten, das Verhalten hat sich geändert, da sich die Rückrufeinstellungen wie unten gezeigt geändert haben.
#Vor dem Überspringen
before_validation :func, on: :action
#Nach dem Überspringen
before_validation :func
Das erste set_callback
hat nichts über on :: action
angegeben.
set_callback(:validation, :before, :func)
In set_callback wurde on: action
nicht gesetzt und die Einstellung on: action
ging verloren.
Da Sie "on :: action" setzen müssen, müssen Sie diese Einstellung anscheinend in das Argument einfügen, wenn Sie sie aktivieren.
https://stackoverflow.com/questions/46810340/how-to-set-callback-with-the-on-create-option-in-rails-test
set_callback(:validation, :before, :func, on: :action)
Selbst wenn ich dies versuchte, verbesserte es sich nicht.
Ich habe die Quelle überprüft. https://github.com/rails/rails/blob/070d4afacd3e9721b7e3a4634e4d026b5fa2c32c/activesupport/lib/active_support/callbacks.rb#L674
Es scheint schwierig zu sein, "on :: action" zu setzen, da die im Quellcode kommentierten Argumente nur "if", "es sei denn" und "prepend" enthalten.
Als letzte Problemumgehung habe ich mich für diese Methode entschieden, da es eine Methode gibt, die Rückrufe vermeidet und die Verarbeitung durchführt. https://railsguides.jp/active_record_callbacks.html#%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B
skip_callback
und set_callback
sind bequeme Methoden, um Rückrufe zu vermeiden. Wenn jedoch Bedingungen mit on
hergestellt werden und es in Ordnung ist, alle Rückrufe zu vermeiden, werden in erster Linie Rückrufe verwendet. Im Moment frage ich mich, ob es besser ist, eine Methode zu verwenden, die es vermeiden kann.
Recommended Posts