2012-03-23 15 views
10

Tengo user.errors que da todos los errores en mi controlador. Entonces, tengo el campo :user_login que tiene su error (s). ¿Cómo puedo obtener completos mensajes de error de user.errors SOLAMENTE para ese campo?Rails 3 - obtener mensaje de error completo para un campo

puedo conseguir sólo texto de este campo así:

user.errors[:user_login] # Gives that 'can't be empty' 

pero realmente quiero hacer algo por el estilo

user.errors.get_full_message_for_field[:user_login] # 'Your login can't be empty' 

Respuesta

19

Bueno, sé que esta pregunta fue publicada explícitamente rieles 3.x, uno y medio años atrás, pero ahora Rieles 4.x parece tener el mismo método que deseabas, full_messages_for.

user.errors.full_messages_for(:user_login) #=> return an array 
# if you want the first message of all the errors a specific attribute gets, 
user.errors.full_messages_for(:user_login).first 
# or 
user.errors.full_messages_for(:user_login)[0] 

Es menos detallado que el user.errors.full_message(:user_login, user.errors[:user_login].first) utilizado anteriormente.

0

Aquí está el fragmento de código para mostrar solo el primer error para cada campo.

<!-- Display only first error for each field ---> 
<% entity.attributes.keys.each do |key| %> 
    <% if entity.errors.full_messages_for(key.to_sym).length > 0 %> 
     <li><%= entity.errors.full_messages_for(key.to_sym).first %></li> 
    <% end %> 
<% end %> 
1
We can get the error message of particular field by using 

<%= resource.errors.full_messages_for(:email).join("") %> 

output : Email cant be blank 

If you want to check the particular field has error or not then check it by using 

resource.errors.include?(:email) 

output : true/false 
+0

bueno para usar' full_messages_for'. A propósito revisando si el campo específico tiene error/so no, podemos usar esto también 'resource.errors [: field] .any?' –

Cuestiones relacionadas