mensaje personalizado de validación para rieles 3

94

Rails ha introducido una nueva forma de validar atributos dentro del modelo. Cuando uso

validates :title, :presence => true

funciona pero cuando intento agregar un mensaje personalizado

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

se genera un error

Unknown validator: 'message'
Prabesh Shrestha
fuente

Respuestas:

196

Prueba esto

validates :title, presence: { message: "Story title is required" }
Shiv
fuente
19
¿Cómo elimino el: title del mensaje de error anterior? Arriba se muestra como "Se requiere el título de la historia de título". Quiero "Se requiere el título de la historia". Gracias.
datauser
5
¿A dónde ha => trueido en esta respuesta? ¿No es necesario?
davetapley
2
@dukedave, por extraño que parezca, no es necesario. Puede pasar cualquier cosa "veraz" presence.
daño
1
@NotDan, enlace roto.
stevenspiel
2
@Mayumi: puede eliminar el nombre del atributo del mensaje escribiendo una validación manual y agregando el error :base, por ejemploerrors.add(:base, "Story title is required)
Marco Prins
18

De hecho, hice esto de una mejor manera. Si desea eliminar el título del campo del mensaje, debe usarlo en su vista _form.htmk.erb:

Como puede ver dentro de esta vista:

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

Reemplácelo por:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>
Mateusgf
fuente
Htmk? Por qué, NUNCA
Marco Prins
1

Un mensaje personalizado para un booleano con condicionales podría ser:

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

Puede utilizar HUMANIZED_ATTRIBUTES de rieles 3. Por ejemplo, en el caso anterior, será como:

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

Le dará un mensaje de error, reemplazando el título del atributo del modelo con la historia.

Shyamkkhadka
fuente