2010-02-15 18 views
10

Estoy creando una aplicación de Rails, y tengo un modelo llamado User. En este modelo, tengo un valor booleano llamado isagirl. Un usuario debe especificar si es una chica o no, lo que se hace con dos botones de opción. En mi modelo que tengo esto:validates_presence_of +: el mensaje muestra el nombre del campo

validates_presence_of :isagirl, :message => "You must be either a Boy or a Girl. If not, please contact us." 

Sin embargo, cuando no se especifica un sexo, estoy viendo esto:

Isagirl Debe ser un niño o una niña.

como un mensaje de error. El problema es que 'Isagirl' no debe estar allí en el mensaje de error. ¿Cómo puedo desactivar eso? Y no, usar CSS para ocultarlo no es una opción.

Gracias

+4

por lo que vale, es una buena idea apoyar géneros no binarios en formularios si es posible –

Respuesta

8

la forma en que hago esto es para dar salida al mensaje sin el nombre del campo. Por ejemplo, tengo un parcial que emite los mensajes de error después de que la validación falla.

<ul> 
    <% errors.each do |attribute, message| -%> 
     <% if message.is_a?(String)%> 
      <li><%= message %></li> 
     <% end %> 
    <% end -%> 
</ul> 

Observe que esto no genera el atributo. Solo necesita asegurarse de que todos sus mensajes tengan sentido sin un nombre de atributo.

+0

Bien, pero ¿cómo sabe ese código qué forma quieres? –

0

No sé cómo omitir el nombre del atributo en la función validates_presence_of (que puede ser dolorosa y sin piratería sucio) pero me gustaría utilizar la función de validación para lograr lo que quiere:

protected 
    def validate 
     errors.add_to_base("You must be either a Boy or a Girl. If not, please contact us.") if params[:isagirl].blank? 
    end 

que utiliza específicamente método en blanco? aquí porque validates_presence_of está utilizando en blanco? para la prueba deberías obtener este mismo comportamiento.

add_to_base está agregando mensajes de error generales que no están relacionados con los atributos y esto le evita hackear la vista.

5

En uno de mis proyectos estaba usando el complemento custom-err-msg. Con ella cuando se especifica mensaje de error de la siguiente manera:

:message => "^You must be either a Boy or a Girl. If not, please contact us." 

(aviso ^ al inicio) no se imprimirá el nombre de atributo cuando se imprime errores. Y puede usar ayudantes estándar error_messages o error_messages_for.

+0

pulgares arriba para la respuesta :) – bharath

+0

FYI, esta joya ahora se llama 'mensaje_perfil_personalizado' y está disponible aquí: https://github.com/jeremydurham/custom-err-msg – Martin

0

Recomiendo usar la opción errors.add_to_base. Sin saber cómo se ve tu diseño, esa será la forma más sencilla de que aparezca un mensaje de error simple.

Cuestiones relacionadas