7

Al configurar un mensaje de validación en un clip, comoCambio mensaje de validación error en Paperclip

validates_attachment_presence, :image, :message => 'xxxx' 

El mensaje personalizado viene precedidas por el nombre del campo, a pesar de que se ha sobrescrito con el: Mensaje . ¿Cómo anulas totalmente el mensaje y lo haces totalmente personalizado?

Editar: errata

Respuesta

7

No es una solución real, pero una fácil es omitir la validación del clip y escribir uno personalizado.

validate :check_content_type 

    def check_content_type 
    if !['image/jpeg', 'image/gif','image/png'].include?(self.image_content_type) 
    errors.add_to_base("Image '#{self.image_file_name}' is not a valid image type") # or errors.add 
    end 
    end 

espero que pueda ayudar a

0

No sé si es sólo un error tipográfico en el interior de su pregunta, pero debería ser:

validates_attachment_presence :image, :message => 'xxxx' 

Y yo no usaría: mensaje para agregar un mensaje de error personalizado , pero póngalo dentro de un archivo de configuraciones regionales

+0

sólo un error tipográfico, lo editó aplausos – Smickie

+0

extraños. Acabo de probarlo y veo el mensaje bien. La cosa es que el error se está agregando a 'image_file_name', por lo que podría simplemente agregar una validación simple de Rails en esa columna (no estoy seguro de si funciona) y agregar un: mensaje a esa.Aún así, es mejor hacer todos los mensajes dentro de un archivo de configuraciones regionales. ¿Y qué versión de Paperclip estás usando? Porque podría ser un error en una versión anterior. – RobinBrouwer

+0

Simplemente vuelva a leer su publicación y creo que la malinterpreté. El mensaje se muestra, pero el nombre de la columna también se muestra en el mensaje. Supongo que es una cosa de 'error_messages_for'. Normalmente no uso 'error_message_for' (también porque no está en Rails 3), así que no lo vi en mi pequeña prueba. No sé cómo solucionarlo por usted. Lo siento por eso. :( – RobinBrouwer

1

Su comportamiento estándar de rieles para mostrar incluye el nombre del atributo antes de los errores de validación. Usted tiene algunas opciones para evitar este comportamiento:

  1. hacer que su mensaje de error bien tener el nombre del atributo antepuesto :)

  2. utilizar un mensaje de error formateador diferente. Es bastante fácil escribir su propio ayudante para iterar a través de un @ object.errors y ajustar mensajes en etiquetas HTML. Prefiero usar los mensajes de error en línea cerca de los campos, por lo que siempre omitimos el nombre del atributo.

  3. Validación personalizada que agrega errors to base. Esto es fácil, pero incorrecto, ya que está sugiriendo que hay un error de validación en un campo. Todavía puede resolver su problema.

  4. Anule humanized_attribute_name para que ese atributo lo oculte. humanized_attribute_name probablemente se use en otro lugar, por lo que puede causar otros problemas.

.

HumanizedAttributesOverride = { 
    :image => "" 
} 

def self.human_attribute_name(attr) 
    HumanizedAttributesOverride[attr.to_sym] || super 
end 
+0

El nombre del atributo se está agregando a los errores para basar el conjunto de errores en campos no individuales pero, el nombre de los campos se muestra en el área de errores base. – Smickie

3

En realidad, desea hacer esto dentro de su vista en lugar de su modelo y en realidad es bastante sencillo. Sólo vamos a recorrer los errores, y cuando el uno para su fijación viene vamos a pasar por alto el nombre de campo:

<ul> 
    <% @myObject.errors.keys.each do |field| %> 
    <% @myObject.errors[field].each do |msg| %> 
     <% if field == :image_file_name %> 
     <li><%= msg %></li> 
     <% else %> 
     <li><%= field.to_s + " " + msg %></li> 
     <% end %> 
    <% end %> 
    <% end %> 
</ul> 

Sustitución @myObject con el nombre de su modelo que sólo debe indicar el conjunto de mensajes a sus errores de validación de adjuntos. Este es solo un ejemplo simple que los muestra en línea con el resto, pero por supuesto puede hacer lo que quiera con los mensajes. Es importante mantener el nombre del campo que tuvo el error en caso de que desee programar cualquier lógica que sea específica para su falla sin tener que confiar en que el mensaje de error permanezca exactamente igual para siempre.

Cuestiones relacionadas