Использование carrierwave для загрузки файла вызывает неопределенный метод `empty?' для ноля:NilClass

Это действие моего контроллера для загрузки файла.

def download_file
    doc = Doc.find(params[:doc_id])
    address = doc.file_name.file.path
    puts("ADDRESS: ")
    puts(doc.file_name.file.path)

    send_file(doc.file_name.file.path,
        :filename =>doc.short_name,
        :type => doc.file_name.content_type,
        :disposition => 'attachment',
        :url_based_filename => true)
end

У меня нет проблем с загрузкой большинства файлов. Тем не менее, я получил это сообщение об ошибке, что я не знаю, как справиться

Parameters: {"doc_id"=>"5"}
Doc Load (0.2ms)  SELECT  "docs".* FROM "docs" WHERE "docs"."id" = ? LIMIT ?  [["id", 5], ["LIMIT", 1]]
ADDRESS: 
/home/ubuntu/workspace/public/uploads/doc/file_name/5/test.gh
Sent file /home/ubuntu/workspace/public/uploads/doc/file_name/5/test.gh (2.0ms)
Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.2ms)
NoMethodError (undefined method `empty?' for nil:NilClass):

Спасибо!

Ответ

Я нашел решение и делюсь им здесь для тех, кто может столкнуться с той же проблемой. Удаление дополнительных аргументов из функции send_file решает проблему. Кажется, когда тип файла неизвестен, скорее всего возникнет исключение. Следующий код работал для меня просто отлично.

def download_file
    doc = Doc.find(params[:doc_id])
    send_file(doc.file_name.file.path)
end

0 ответов

Другие вопросы по тегам