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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top