2009-10-12 5 views
2
class Article < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :article 
    validates_presence_of :body 
    validates_presence_of :author_name 
end 

Si je laisse le nom d'auteur vide, j'obtiens une erreur de validation correcte. Tout bon.Comment gérer la validation avec la relation has_many

>> Article.first.comments.create(:body => 'dummy body').errors.full_messages 
=> ["Please enter your name"] 

Regardez cet exemple. J'envoie l'instance de l'article (a dans ce cas) pour voir la couche. Je me demandais comment obtenir l'accès à l'erreur de prix 's'il vous plaît entrer votre nom' de l'objet d'instance a.

Répondre

4

Vous pouvez affecter le commentaire nouvellement créé à sa propre variable et l'envoyer également à la vue. Vous pouvez ensuite utiliser error_messages_for 'article', 'comment' pour afficher les erreurs des deux objets. Je ne sais pas s'il y a un moyen d'afficher automatiquement les erreurs enfant individuelles au lieu de la "X est invalide" ...

0

En supposant que la vue est la forme qui a tenté de créer l'objet, vous devriez être en mesure de faire exactement ce que vous avez fait ci-dessus:

@article.errors.full_messages 

Autres vues qui ont juste accès à l'objet (comme l'indice ou afficher des vues) n'aura aucune erreur car ce tableau n'est rempli que lors de la tentative de création ou de mise à jour de l'article.

1

Juste en complément de la réponse de Daniel, au cas où vous souhaitez personnaliser le message d'erreur 'Comments is invalid', j'ai trouvé une façon de le faire à travers i18n:

# config/locales/en.yml 
en: 
    activerecord: 
    attributes: 
     article: 
     comments: Comment 

de cette façon, vous obtiendrez 'Comment is invalid' qui est syntaxiquement correct :) vous pouvez également modifier la 'is invalid' partie:

# config/locales/en.yml 
en: 
    activerecord: 
    errors: 
     models: 
     article: 
      attributes: 
      comments: 
       invalid: are invalid 

Et cette façon, vous obtiendra 'Comments are invalid'.

Questions connexes