TypeError (No se puede convertir nula en cadena) Con Attachment_Fu
-
18-09-2019 - |
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?
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? %>
Esto podría ayudar .. http://david-burger.blogspot.com/2008/ 10 / attachmentfu-con-optional.html