ruby on rails - notidentifiedbyimagemagickerror - Validaciones de clip más inteligentes
ruby on rails active storage (2)
Estoy usando un clip en una aplicación de rieles y tengo las siguientes tres validaciones en mi modelo
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than=>1.megabyte
validates_attachment_content_type :photo, :content_type=>[''image/jpeg'', ''image/png'', ''image/gif'']
Si el usuario olvida agregar un archivo adjunto, las tres validaciones fallan y, por lo tanto, al usuario se le presentan los siguientes tres errores:
# Photo file name must be set.
# Photo file size file size must be between 0 and 1048576 bytes.
# Photo content type is not included in the list
Creo que sería mejor mostrar el primer error en este caso, ya que los otros dos errores son puramente consecuentes ... Preferiría que el usuario solo vea los dos segundos errores si se ha agregado un archivo adjunto pero no cumple. Los criterios de validación.
Estoy seguro de que no hay una validación precocida para este tipo de cosas y de leer el código en proveedor / plugins / paperclip / lib / paperclip.rb veo que el método validates_attachment_size admite el parámetro: menos como se muestra:
def validates_attachment_presence name, options = {}
message = options[:message] || "must be set."
validates_presence_of :"#{name}_file_name",
:message => message,
:if => options[:if],
:unless => options[:unless]
end
Entonces, estaba pensando que podría hacer algo como lo siguiente:
validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank
Pero eso rompe la aplicación. ¿Alguien tiene alguna experiencia de hacer este tipo de cosas? Sería una buena contribución al código fuente del clip.
EDITAR:
He intentado usar esto:
validates_attachment_size :photo, :less_than=>1.megabyte,
:unless=> Proc.new { |image| image[:photo].nil? }
Sin embargo, no funciona del todo, ya que solo pude subir un mp3 de 5 mb con esta validación en su lugar. Pero es prometedor ya que el mensaje de error no aparece cuando el usuario no ha adjuntado una foto.
Creo que puedes hacerlo de otra manera. No te metas con las validaciones. Probablemente tengas algo como esto en tu forma:
<%= f.error_messages %>
Puede eliminarlo y escribir su propio ayudante para mostrar mensajes de error. Los errores se almacenan en hash:
@photo.errors
O si quieres llegar a ellos a través del creador de formularios:
f.object.errors
validates_attachment_size :photo, :less_than => 1.megabyte,
:unless => Proc.new { |imports| imports.photo_file_name.blank? }