Ошибка типа (не удается преобразовать nil в строку) С помощью Attachment_Fu

StackOverflow https://stackoverflow.com/questions/798775

Вопрос

Я обрабатываю вложения файлов в своем приложении 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? %>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top