Pregunta

Estoy manejo de archivos adjuntos en mi aplicación Rails con Attachment_fu, que proporciona un método public_filename para recuperar la URL de un archivo. Lo estoy usando en un modelo llamado cubierta, por lo que si quiero llamar a la URL de una imagen del libro cargado, en una vista que haría:

<%= image_tag(@cover.public_filename) %>

Esto funciona bien cuando el usuario tiene el accesorio apropiado, pero en mi solicitud no es un requisito para un usuario para cargar un archivo adjunto.

Por lo tanto, llamar @cover.public_filename lanzará una TypeError:. No se puede convertir en cadena nula por la razón obvia de que el archivo es nulo

Sin embargo, estoy teniendo problemas para añadir lógica a este problema de manera efectiva ya que el objeto es nulo, y todos mis intentos con hacer cosas como unless @cover.public_filename.nil? o if @cover.public_filename == nil he sido infructuosos y causar el mismo error de tipo.

¿Qué me falta?

¿Fue útil?

Solución

yo no trabajo con attachment_fu, pero como veo public_filename es el método que se basa en algunos campos que son nulas cuando no tiene apego adjunta. Aquí leí que attachment_fu debe siempre tiene apego - y esto es probablemente una razón por la que no ha resuelto tu problema. El autor también sugiere el uso de clip plugin. Tome una mirada en ella!

Otros consejos

<%= image_tag(@cover.public_filename) unless @cover.nil? %>

En este momento, no se puede comentar, así que aquí tiene un actualización en su lugar:

@cover.public_filename? no funcionará aquí porque es un objeto @cover nil y como tal tiene ningún método public_filename?.

nil.respond_to?('public_filename?') #=> false

Actualizado:

Que sea:

<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top