Ignorer les rappels et la validation
Est-il un moyen d'ignorer les rappels et la validation par faire quelque chose le long de ces lignes de Rails 3?
Object.save(:validate => false, :skip_callbacks => true)
Merci!
source d'informationauteur nbucciarelli
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré quelque chose comme ça avant et j'ai utilisé ceci:
fonctionne comme vous le souhaitez. Pour autant que je sais vous ne pouvez pas désactiver les rappels (sauf si vous retourne la valeur false à partir d'un before_ de rappel, mais que puis abandonne la transaction).
Sauter des rappels est un peu délicat. Certains plugins et des adaptateurs d'ajouter leurs propres "essentiel" rappels (acts_as_nested_set, oracle_enhanced_adapter à titre d'exemples).
Vous pouvez utiliser le
skip_callback
etset_callback
méthodes de vérifier quels sont ceux que vous pourriez être en mesure de sauter.Quelques méthodes de la classe pourrait aider:
Pour sauter de rappels dans Rails 3, vous pouvez utiliser
update_all
de votre but.Source: update_all
La liste complète pour sauter de rappels sont ici:
Source: Sauter Des Rappels
Si vous essayez de mettre à jour le dossier de sauter tous les rappels et les validations vous pouvez utiliser
update_columns
passant les attributs de hachage. Cette méthode permettra de mettre à jour les colonnes de direct sur la base de données.Par exemple:
object.update_columns(name: 'William')
Si vous souhaitez créer un nouvel objet, je pense que malheureusement il n'y a pas de méthode pour passer à la fois des validations et des rappels.
save(:validate => false)
fonctionne pour les validations. Pour les rappels vous pouvez utiliserskip_callback
mais attention, votre code ne sera probablement pas thread-safe.http://guides.rubyonrails.org/active_record_validations_callbacks.html détails une petite liste de méthodes qui permettent d'éviter des rappels et des validations - aucun de ces "enregistrer".
Cependant, le point de validations et des rappels est de faire respecter la logique métier. Si vous êtes en évitant de vous devriez vous demander pourquoi.
Voir aussi: Comment puis-je éviter de courir ActiveRecord rappels?