Ошибка типа (не удается преобразовать nil в строку) С помощью Attachment_Fu
-
18-09-2019 - |
Вопрос
Я обрабатываю вложения файлов в своем приложении Rails с помощью Attachment_fu, которое предоставляет public_filename
способ получения URL-адреса файла.Я использую его в модели под названием Cover, поэтому, если я хочу вызвать URL загруженного изображения обложки, в представлении я бы сделал:
<%= image_tag(@cover.public_filename) %>
Это работает просто отлично, когда у пользователя есть соответствующее вложение, но в моем приложении загрузка вложения пользователем не является обязательным требованием.
Поэтому, вызывая @cover.public_filename
выдаст ошибку типа:Не удается преобразовать nil в строку по очевидной причине, что файл равен nil.
Однако у меня возникают проблемы с эффективным добавлением логики к этой проблеме, поскольку объект равен нулю, и все мои попытки делать такие вещи, как unless @cover.public_filename.nil?
или if @cover.public_filename == nil
были бесплодными и вызывали ошибку того же типа.
Что я упускаю из виду?
Решение
Я не работал с attachment_fu , но, как я вижу, public_filename - это метод, который полагается на некоторые поля, которые равны нулю, когда у вас нет прикрепленного вложения. Здесь Я читал, что attachment_fu всегда должен иметь attachment - и это, вероятно, причина, по которой у вас это не сработало.Автор также предлагает использовать скрепка для бумаги плагин.Взгляните на это!
Другие советы
<%= image_tag(@cover.public_filename) unless @cover.nil? %>
Извините, не могу прокомментировать, так что вот Обновить вместо этого:
@cover.public_filename?
здесь это не сработает, потому что @cover
является nil
объект и как таковой не имеет public_filename?
способ.
nil.respond_to?('public_filename?') #=> false
Обновленный:
Сделай это:
<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>
Это могло бы помочь..http://david-burger.blogspot.com/2008/10/attachmentfu-with-optional.html