TypeError (Impossible de convertir en nil String) Avec attachment_fu
-
18-09-2019 - |
Question
Je manipulation des pièces jointes dans mon application Rails avec attachment_fu, qui fournit une méthode de public_filename
pour récupérer l'URL d'un fichier.
Je l'utilise sur un modèle appelé couverture, donc si je veux appeler l'URL d'une image de couverture téléchargé, dans une vue que je ferais:
<%= image_tag(@cover.public_filename) %>
Cela fonctionne très bien lorsque l'utilisateur a l'accessoire approprié, mais dans mon application, il n'est pas une exigence pour un utilisateur de télécharger une pièce jointe.
Par conséquent, l'appel @cover.public_filename
va lancer une TypeError:. Impossible de convertir nil en chaîne pour la raison évidente que le fichier est nul
Cependant, je ne parviens pas à ajouter de la logique à ce problème de manière efficace puisque l'objet est nul, et toutes mes tentatives de faire les choses comme unless @cover.public_filename.nil?
ou if @cover.public_filename == nil
ont été infructueuses et la cause de la même erreur de type.
Qu'est-ce que je suis absent?
La solution
Je ne travaille pas avec attachment_fu, mais comme je vois public_filename est la méthode qui repose sur certains champs qui sont nuls lorsque vous ne disposez pas d'attachement attaché. Je lis que attachment_fu devrait a toujours l'attachement - et ce qui est probablement une raison pour laquelle cela n'a pas fonctionné pour vous. L'auteur suggère également d'utiliser paperclip plugin. Jetez un coup d'oeil!
Autres conseils
<%= image_tag(@cover.public_filename) unless @cover.nil? %>
Désolé, ne peut pas commenter, voici donc un mise à jour à la place:
@cover.public_filename?
ne fonctionnera pas ici parce que @cover
est un objet nil
et en tant que telle n'a pas de méthode de public_filename?
.
nil.respond_to?('public_filename?') #=> false
Mise à jour:
Faites:
<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>
Cela pourrait aider .. http://david-burger.blogspot.com/2008/ avec-optional.html attachmentfu-10 /