message personnalisé de validation pour les rails 3

94

Rails a introduit une nouvelle façon de valider les attributs à l'intérieur du modèle. Quand j'utilise

validates :title, :presence => true

ça marche mais quand j'essaye d'ajouter un message personnalisé

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

une erreur est générée

Unknown validator: 'message'
Prabesh Shrestha
la source

Réponses:

196

Essaye ça

validates :title, presence: { message: "Story title is required" }
Shiv
la source
19
Comment supprimer le: title du message d'erreur ci-dessus? Ci-dessus s'affiche comme "Titre de l'histoire obligatoire". Je veux "Le titre de l'histoire est obligatoire". Merci.
datauser
5
Où est => truepassé cette réponse? N'est-ce pas nécessaire?
davetapley
2
@dukedave curieusement, ce n'est pas nécessaire. Vous pouvez transmettre tout ce qui est «véridique» presence.
mal le
1
@NotDan, lien rompu.
stevenspiel
2
@Mayumi - Vous pouvez supprimer le nom d'attribut du message en écrivant une validation manuelle et en ajoutant l'erreur à :base, par exempleerrors.add(:base, "Story title is required)
Marco Prins
18

En fait, je l'ai fait d'une meilleure manière. Si vous souhaitez supprimer le titre du champ du message, vous devez l'utiliser sur votre vue _form.htmk.erb:

Comme vous pouvez le voir dans cette vue:

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

Remplacez-le par:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>
Mateusgf
la source
Htmk? Pourquoi, je n'aurais JAMAIS
Marco Prins
1

Un message personnalisé pour un booléen avec des conditions peut être:

validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
stevenspiel
la source
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 un message d'erreur, remplaçant le titre de l'attribut du modèle par l'histoire.

Shyamkkhadka
la source