tutorial rails imagenes active ruby-on-rails activerecord paperclip validation

ruby-on-rails - imagenes - storage rails



Limpiar los mensajes de error de Paperclip (2)

Terminé escribiendo dos validadores personalizados. Es cierto que hacen lo mismo que los validadores de clip, pero fallan más bonitos:

def avatar_is_a_image if self.avatar? if !self.avatar.content_type.match(/image/) errors.add(:avatar, "Avatar must be an image") end end end def avatar_is_less_than_two_megabytes if self.avatar? if self.avatar.size > 5.megabytes errors.add(:avatar, "Avatar must be less than 5 megabytes in size") end end end

Está bien, entonces tengo el clip trabajando, y estoy tratando de usar el validador incorporado para asegurarme de que el archivo esté cargado

  1. Es una imagen
  2. No es muy grande

Así que tengo esto en el modelo, según la documentación:

validates_attachment :avatar, :content_type => { :content_type => /image/ }, :size => { :in => 0..2.megabytes }

Sin embargo, el error que muestra en la vista es este desastre:

Me gustaría que fuera algo un poco más simple, como "Avatar debe ser una imagen de menos de 2 megabytes"

Sin embargo, no puedo ver dónde hacer esto, ya que pasar :message => ''something'' arroja un error Unknown validator: ''MessageValidator''

¿Cómo hago para limpiar esto?

Tenga en cuenta que la feliz ruta de subir una imagen pequeña funciona bien.

Algunas pruebas adicionales muestran que la carga de una imagen que es demasiado grande (como un fondo de escritorio) o algo que no es un archivo .rb falla más elegantemente, pero no muestra ningún mensaje de error. Todavía no es lo que quiero.


Obviamente lo resolvió usted mismo hace mucho tiempo, pero para cualquiera que esté buscando la respuesta, en realidad hay una manera de hacerlo dentro de la validación proporcionada.

Simple agrega tu mensaje así:

validates_attachment :avatar, :content_type => { :content_type => /image/, :message => "Avatar must be an image" }, :size => { :in => 0..2.megabytes, :message => "Avatar must be less than 2 megabytes in size" }