Lorsque j'ai essayé d'éviter temporairement le rappel en utilisant skip_callback et set_callback, set_callback ne fonctionnait pas. Enregistrez la situation et la solution de contournement à ce moment-là.
Je souhaite ignorer temporairement ce rappel.
before_validation :func, on: :action
Implémenté en utilisant skip_callback
et set_callback
.
skip_callback(:validation, :before, :func)
------------------------------------------
#Exécuter le traitement
------------------------------------------
set_callback(:validation, :before, :func)
Cependant, après cela, un problème est apparu dans d'autres opérations et la cause a été recherchée.
skip_callback
peut ignorer le rappel configuré. Cependant, une fois exécuté, il restera ignoré tout le temps, vous devez donc utiliser set_callback
pour le renvoyer.
ʻOn: Parce que: action` n'a pas été réinitialisé.
En d'autres termes, le comportement a changé car les paramètres de rappel ont changé comme indiqué ci-dessous.
#Avant de sauter
before_validation :func, on: :action
#Après avoir sauté
before_validation :func
Le premier set_callback
ne spécifiait rien à propos de ʻon :: action`.
set_callback(:validation, :before, :func)
Dans set_callback, ʻon: action n'était pas défini et ʻon: action
était perdu.
ʻOn :: action` doit être défini, donc s'il est activé, ce paramètre doit également être inclus dans l'argument.
https://stackoverflow.com/questions/46810340/how-to-set-callback-with-the-on-create-option-in-rails-test
set_callback(:validation, :before, :func, on: :action)
Cependant, même si j'ai essayé cela, cela ne s'est pas amélioré.
J'ai vérifié la source. https://github.com/rails/rails/blob/070d4afacd3e9721b7e3a4634e4d026b5fa2c32c/activesupport/lib/active_support/callbacks.rb#L674
Il semble difficile de définir ʻon :: action car il n'y a que ʻif
, ʻunless et
prefend` dans les arguments commentés dans le code source.
En guise de solution finale, j'ai décidé de l'utiliser car il existe une méthode qui évite les rappels et effectue le traitement. 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
et set_callback
sont des méthodes pratiques pour éviter les callbacks, mais si les conditions sont faites en utilisant ʻon` et que vous pouvez éviter tous les callbacks, les callbacks sont utilisés en premier lieu. Pour l'instant, je me demande s'il vaut mieux utiliser une méthode qui peut éviter.
Recommended Posts