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'
Essaye ça
validates :title, presence: { message: "Story title is required" }
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>
Un message personnalisé pour un booléen avec des conditions peut être:
validates :foo, inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
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.