Rails: Paramètre d'attribut dans after_create
Je voudrais ActiveRecord pour définir certaines champ DB automatiquement à l'aide de rappels.
class Product < ActiveRecord::Base
after_create :set_locale
def set_locale
self.locale = I18n.locale
end
end
. /script/console je ne
p = Product.create
p
Champ p.locale n'est pas définie. Qu'ai-je fait de mal?
Probablement Produit.créer est un échec, donc
after_create
n'est pas appelée. Jetez un oeil à p.errors
OriginalL'auteur xpepermint | 2010-02-24
Vous devez vous connecter pour publier un commentaire.
before_create est appelé avant De la Base.enregistrer, depuis votre pas l'enregistrement de ses pas appelé.
Edit:
Avec cette dans votre contrôleur de travail comme vous le souhaitez.
Vous devez appeler la méthode save pour le callback sera appelé, si vous mettez before_create ou after_create. before_create est ce que vous cherchez, mais vous devez appeler l'enregistrer pour qu'il fasse quoi que ce soit.
Cette réponse est fausse. ActiveRecord::Base.créer de déclencher un enregistrement de l'appel et de l'appel de l'enregistrer de nouveau ne résoudra pas le problème.
Le point de l'ensemble de ActiveRecord::Base.créer est pour instancier et enregistrer un modèle.
before_create peut également être utilisé pour définir d'autres domaines qui n'ont pas été recueillies sur le formulaire initial. Par exemple, j'ai aidé à écrire un oAuth mise en œuvre à l'aide de Concevoir et de Omniauth à intégrer dans une plate-forme existante. Concevoir ajoute le champ de nom d'utilisateur de la base de données Utilisateur de Schéma, et nous avons établi que le terrain avant l'enregistrement d'un nouvel Utilisateur avec l'adresse email de l'Utilisateur.
OriginalL'auteur Joey
Utilisation
before_create
pour définir les valeurs par défaut. Rappelez-vous:after_create
est tiré après les enregistrer dans la base de données. À l'aide deafter_create
ne initialiser les valeurs dans la mémoire, et nécessitera supplémentaires enregistrer pour engager la initialisée valeurs à la base de données.OriginalL'auteur Guest68
ce que Joey est en train de dire, c'est que after_create ne fonctionnera pas.
utilisation before_create
OriginalL'auteur Omar Qureshi