web-dev-qa-db-fra.com

message personnalisé de validation pour Rails 3

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'
93
Prabesh Shrestha

Essaye ça

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

En fait, je l'ai fait mieux. Si vous souhaitez supprimer le titre du champ du message, vous devez l'utiliser dans votre vue _form.htmk.erb:

Comme vous pouvez le voir à l'intérieur de 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>
18
Mateusgf

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

validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
1
mr.musicman

Vous pouvez utiliser HUMANIZED_ATTRIBUTES de 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 une histoire.

0
Shyamkkhadka