2011-03-22 2 views
87

Rails a introduit une nouvelle façon de valider les attributs dans le modèle. Lorsque j'utilisevalidation message personnalisé pour les rails 3

validates :title, :presence => true 

cela fonctionne, mais lorsque je tente d'ajouter un message personnalisé

validates :title, :presence => true,:message => "Story title is required" 

une erreur est générée

Unknown validator: 'message' 

Répondre

183

Essayez cette

validates :title, presence: { message: "Story title is required" } 
+18

Comment puis-je retirer le: titre du message d'erreur ci-dessus? Au-dessus affiche "Titre de l'article de titre est requis". Je veux "Le titre de l'histoire est requis." Merci. – Mayumi

+5

Où est le '=> true' parti dans cette réponse? N'est-ce pas nécessaire? – dukedave

+2

@dukedave assez curieusement, ce n'est pas nécessaire. Vous pouvez passer n'importe quoi «véridique» à «présence». – harm

18

En fait, , J'ai fait ça d'une meilleure manière. Si vous souhaitez supprimer le titre du champ du message que vous devez utiliser votre point de vue _form.htmk.erb:

Comme vous pouvez le voir dans ce point de vue:

<ul> 
    <% @article.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <% end %> 
</ul> 

Remplacer par:

<ul> 
    <% @article.errors.each_with_index do |msg, i| %> 
    <li><%= msg[1] %></li> 
    <% end %> 
</ul> 
+0

Htmk? Pourquoi, je n'aurais JAMAIS –

0

Vous pouvez utiliser HUMANIZED_ATTRIBUTES des rails 3. Par exemple dans le cas ci-dessus, ce sera comme:

HUMANIZED_ATTRIBUTES = { 
:title => "story" 
} 
def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

Il vous donnera message d'erreur, en remplaçant le titre d'attribut de modèle avec l'histoire.

1

Un message personnalisé pour un booléen avec conditionals pourrait être:

validates :foo, inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar? 
Questions connexes