9
votes

Association des rails nil dans After_Initialize

J'ai deux modèles avec une association une à plusieurs. Je souhaite définir une valeur par défaut sur le modèle enfant à l'initialisation en fonction de certains états du parent. Cela implique d'avoir un feu de rappel After_Initialize sur l'enfant qui doit accéder au parent par l'intermédiaire de l'association d'appartenance. Le problème est que lorsque j'instire l'enfant à l'aide de la méthode de construction, l'association au parent est nulle dans le rappel After_Initialize. Est-ce que ce comportement attendu? Je suis sur Rails 3.0.6

Un exemple de jouet: xxx

et dans un contrôleur: xxx

Dans l'appel à set_default_value, Merchant est nul s'il semble qu'il ne devrait pas être.


5 commentaires

L'instance de marchand d'origine a-t-elle déjà été sauvée, avant d'appeler Merchant.Products.Build?


Oui, le commerçant serait un enregistrement existant dans la DB afin qu'il aurait un identifiant valide.


J'ai essayé presque exactement comment vous l'avez et cela a fonctionné pour moi. Seule la différence est que Produits de classe doit être produit de classe sans le S .


Juste désolé qui était une faute de frappe dans la question. Édité que. Mu et Chris, lorsque vous dites que cela a fonctionné pour vous, avez-vous vérifié l'identifiant du marchand dans le rappel ou après la construction de l'objet résultant? Dans ma situation, l'identifiant du commerçant est correct dans l'objet produit résultant, mais nil dans le rappel.


Je suis coincé avec le même problème. Avez-vous trouvé une solution pour cela?


3 Réponses :


1
votes

Je changerais le code comme suit: xxx

puis modifiez votre appelant sur: xxx

aussi, j'ai trouvé après_Initialiser rappels pour être lent. Une autre option est donc de déplacer la logique dans le constructeur pour le produit. xxx

Ceci élimine également la loi de la violation de Demeter du code (c'est-à-dire que le produit ne devrait pas savoir / soin de ce que l'état du marchand est).


0 commentaires

0
votes

Je suis sur les rails 2.3 et je peux confirmer que xxx pré>

ne renvoie pas la bonne association de marchand_id dans un rappel après_initialize p>

mais j'ai constaté que cela Travaillez correctement avec P>

product = merchant.products.new


0 commentaires

0
votes

Vous recherchez probablement inverse_of xxx


1 commentaires

Pourquoi recherchent-ils inverse_of ?