2011-03-22 19 views
87

Rails ha introducido una nueva forma de validar atributos dentro del modelo. Cuando usovalidación mensaje personalizado para carriles 3

validates :title, :presence => true 

funciona, pero cuando trato de agregar un mensaje personalizado

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

se genera un error

Unknown validator: 'message' 

Respuesta

183

probar este

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

¿Cómo se quita el: título del mensaje de error anterior? Arriba se muestra como "Título de la historia del título es obligatorio". Quiero "Se requiere título de la historia". Gracias. – Mayumi

+5

¿Dónde ha ido el '=> verdadero' en esta respuesta? ¿No es necesario? – dukedave

+2

@dukedave por extraño que parezca no es necesario. Puedes pasar cualquier cosa 'verdad' a 'presencia'. – harm

18

realidad , Hice esto de una mejor manera. Si desea eliminar el título del campo del mensaje que debe utilizar esto en su vista _form.htmk.erb:

Como se puede ver dentro de este punto de vista:

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

sustituirlo por:

<ul> 
    <% @article.errors.each_with_index do |msg, i| %> 
    <li><%= msg[1] %></li> 
    <% end %> 
</ul> 
+0

Htmk? Por qué, NUNCA –

0

Puede usar HUMANIZED_ATTRIBUTES of rails 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 

Se le dará el mensaje de error, en sustitución de modelo atributo title con la historia.

1

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

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