TypeError (Não é possível converter nulo em String) Com attachment_fu
-
18-09-2019 - |
Pergunta
Eu estou lidando com anexos de arquivo em meu app Rails com attachment_fu, que fornece um método public_filename
para recuperar o URL de um arquivo.
Eu estou usando-o em um modelo chamado Cover, por isso, se eu quero chamar a URL de uma imagem da capa carregado, em uma visão que eu faria:
<%= image_tag(@cover.public_filename) %>
Isso funciona muito bem quando o usuário tem o acessório apropriado, mas na minha aplicação não é um requisito para um usuário fazer o upload de um anexo.
Portanto, chamando @cover.public_filename
irá lançar um TypeError:. Não é possível converter nulo em Cadeia pela razão óbvia de que o arquivo é nulo
No entanto, estou tendo problemas para adicionar lógica para este problema de forma eficaz desde que o objeto é nulo, e todos os meus tentativas com fazendo coisas como unless @cover.public_filename.nil?
ou if @cover.public_filename == nil
foram infrutíferas e causa o mesmo tipo de erro.
O que eu estou ausente?
Solução
Eu não trabalho com attachment_fu, mas como eu vejo public_filename é um método que se baseia em alguns campos que são nulo quando você não tem apego anexado. Aqui Eu li que attachment_fu deve sempre tem anexo - e esta é provavelmente uma razão pela qual ele não funcionou para você. O autor também de sugerir o uso clipe plugin. Dê uma olhada nisso!
Outras dicas
<%= image_tag(@cover.public_filename) unless @cover.nil? %>
Desculpe, não posso comentar, então aqui está um update em vez disso:
@cover.public_filename?
não vai funcionar aqui porque @cover
é um objeto nil
e como tal não tem nenhum método public_filename?
.
nil.respond_to?('public_filename?') #=> false
Atualizado:
Faça-o:
<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>
Isto pode ajudar .. http://david-burger.blogspot.com/2008/ 10 / attachmentfu-com-optional.html