2010-12-06 3 views
-1

J'utilise Concevoir et ont des modèles mis en place comme ceci:Rails 3: Pourquoi `Hash errors` est vide pour le modèle imbriqué (toutes les erreurs sont dans le modèle parent)

User 
    has_one :profile 
Profile 
    belongs_to :user 
    has_one :address 
Address 
    belongs_to :profile 

Pour les tests, j'ai fait erreurs sur le formulaire (c'est un formulaire imbriqué, en utilisant les 3 modèles). Ceci est le hachage des erreurs résultant (@user.errors hash):

{ 
:email=>["can't be blank"], 
:password_confirmation=>[], 
:password=>["can't be blank"], 
:"profile.first_name"=>["can't be blank","is too short (minimum is 1 characters)"] 
:"profile.address.street"=>["can't be blank"], 
} 

Toutes les erreurs sont attendues, mais le format clé de hachage est inattendu (:"profile.address.street") - j'aurais pensé errors de chaque modèle imbriqué hachage contiendrait les erreurs pour ce modèle ?

J'ai vérifié dans le hachage @user.profile.errors, et c'est vide!

Comment puis-je obtenir les erreurs spécifiques au modèle imbriqué dans le hachage errors correspondant du modèle imbriqué?

MISE À JOUR

Je piraté une solution here. J'avais une question à ce sujet aussi, donc la solution n'est pas affichée comme une réponse à cette question :)

Répondre

1

Ran dans ce pas trop longtemps et a dû préparer un code pour les arracher moi-même. Il n'est pas supporté par défaut dans Rails - Ryan Daigle y touche here a bit.

+0

S'il vous plaît regarder ma solution dans http://www.stackoverflow.com/q/4371184/382818? – Zabba

1

Essayez ceci:

@user.profile.valid? 
@user.profile.errors 
+0

Super! Appelé "valide?" Dans la vue et cela fonctionne. BTW, y a-t-il un moyen de patcher une classe pour que cela se fasse automatiquement au lieu de devoir l'appeler dans toutes les vues? – Zabba

+0

Heureux qui a travaillé pour vous. Vous pouvez remplacer "valide?" Ou "erreurs" dans votre modèle 'User', mais je ne le recommande pas si la méthode simple ci-dessus fonctionne. – bowsersenior

+0

En fait, cela n'a pas beaucoup aidé puisque l'appel de "valide?" Affiche les messages d'erreur même lorsque le bouton de soumission n'est pas pressé (c'est-à-dire que GETt la page affiche les erreurs!). S'il vous plaît regardez ma solution dans http://stackoverflow.com/q/4371184/382818? – Zabba

Questions connexes