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'

Réponses:


196

Essaye ça

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

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>

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?

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.