Использование 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