TypeError (невозможно преобразовать ноль в строку) с Attachment_Fu - PullRequest
2 голосов
/ 28 апреля 2009

Я работаю с вложенными файлами в моем приложении на Rails с помощью Attachment_fu, который предоставляет метод public_filename для получения URL-адреса файла. Я использую его на модели с названием Cover, поэтому, если я хочу вызвать URL загруженного изображения обложки, в представлении я бы сделал:

<%= image_tag(@cover.public_filename) %>

Это прекрасно работает, когда у пользователя есть соответствующее вложение, но в моем приложении пользователь не обязан загружать вложение.

Следовательно, вызов @cover.public_filename вызовет ошибку TypeError: Невозможно преобразовать nil в String по очевидной причине, что файл равен nil.

Однако у меня возникают проблемы с эффективным добавлением логики к этой проблеме, поскольку объект равен нулю, и все мои попытки выполнить такие действия, как unless @cover.public_filename.nil? или if @cover.public_filename == nil, оказались бесплодными и вызывают ту же ошибку типа. *

Чего мне не хватает?

Ответы [ 4 ]

2 голосов
/ 29 апреля 2009

Я не работал с attachment_fu, но, как я вижу, public_filename - это метод, который опирается на некоторые поля, которые равны нулю, когда у вас нет прикрепленного вложения. Здесь Я читал, что attachment_fu всегда должен иметь вложение - и это, вероятно, причина, по которой он не работает для вас. Автор также предлагает использовать плагин paperclip . Взгляните на это!

1 голос
/ 28 апреля 2009
<%= image_tag(@cover.public_filename) unless @cover.nil? %>

Извините, не могу комментировать, поэтому вместо обновление :

@cover.public_filename? не будет работать здесь, потому что @cover является nil объектом и поэтому не имеет public_filename? метода.

nil.respond_to?('public_filename?') #=> false
0 голосов
/ 25 июля 2009
0 голосов
/ 28 апреля 2009

Обновлен:

Сделать это:

<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>

...