Comment utiliser le after_initialize " dans Rails 3?
Mise à JOUR
J'ai tort vérifié le edgerails guide au lieu de la corriger Rails 3 guide (qui n'a aucune mention de after_initialize). Je ne sais pas pourquoi le edgerails guide est "incorrect" si - je pensais que edgerails guide était censé être le dernier à jour du guide?
Je pars de cette question-est, juste au cas où quelqu'un vient les chercher pour le même "problème".
Macro-style appel à after_initialize
est le chemin à parcourir.
Devrait after_initialize
être utilisée comme méthode ou macro-style appel ?
Cela fonctionne, mais donne une dépréciation avertissement:
def after_initialize
logger.info "Called after_initialize"
end
AUTODÉRISION AVERTISSEMENT: Base#after_initialize a été abandonné,
veuillez utiliser la Base.after_initialize :méthode à la place.
Cela fonctionne, et il n'y a pas d'avertissement:
after_initialize :do_this_after_initialize
def do_this_after_initialize
logger.info "Called after_initialize"
end
Mais la Active Record des Validations et des Rappels Guide dans 10.4 after_initialize et after_find dit:
...Si vous essayez d'enregistrer
after_initialize ou after_find à l'aide de
macro-style méthodes de la classe, ils vont
juste être ignoré. Ce comportement est
pour des raisons de performances, depuis
after_initialize et after_find va
les deux être appelée pour chaque enregistrement
dans la base de données, ralentir considérablement
en bas de la requêtes...
Cela signifie donc que la macro-style d'utilisation est inefficace par rapport à la méthode de style de la sorte?
(Je deviner le guide est faux, parce que le code est roi :D)
Une Autre Mise À Jour
Un s'engager ici du 28 janvier 2011, suggère que la bonne manière est toujours à utiliser les macro-style appel, pas un def after_initialize
.
- Je suis en utilisant after_initialize par exemple pour les immeubles associations. Un exemple after_initialize :build_text, :à moins d' => :le texte. Très utile lors de l'utilisation accepts_nested_attributes_for
- Voici une mise à jour du lien pour les Rails 4 guide sur after_initialize
Vous devez vous connecter pour publier un commentaire.
Les rappels doivent être utilisés en macro style dans votre modèle: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html