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?

Foi útil?

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? %>

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top