ruby-on-rails - nil:NilClass 的未定义方法“original_filename”
问题描述
我正在尝试将文件作为附件上传到电子邮件。当我尝试上传时,出现错误
“nil:NilClass 的未定义方法‘original_filename’”我做错了什么?
我需要从控制器中捕获文件,并在 params[:file] 不存在时处理异常?
在我看来,有简单的上传文件标签
%strong Send Email with PDF attachment:
= file_field_tag :file
我需要从控制器中捕获文件,这是我的控制器..
@name = params[:file].original_filename
if params[:file].present?
directory = "public/data"
path = File.join(directory, @name)
uniq_name = (0...10).map {(65 + rand(26)).chr}.join
time_footprint = Time.now.to_formatted_s(:number)
File.open(path, "wb") do |file|
file.write(params[:file].read)
@uniq_path = File.join(directory, uniq_name + time_footprint + File.extname(file))
File.rename(file, @uniq_path)
end
else
flash[:notice] = "You are going to send email without the invoice"
redirect_to update_estimate_job_final_invoices_path(@ticket)
end
解决方案
第一行是@name = params[:file].original_filename
. 如果params[:file]
不存在,则调用original_filename
将失败。将该行移到 if 语句中:
if params[:file].present?
@name = params[:file].original_filename
directory = "public/data"
path = File.join(directory, @name)
...
else
...
end
推荐阅读
- python - 如何计算一个单词在用户输入的句子中出现了多少次?
- r - 从 ggplot 中删除特定的垂直网格线
- python - 我的自定义 keras 损失函数的问题
- visual-studio-code - VS-Code 奇怪的行为:无法将文本从浏览器拖放到编辑器中。为什么是这样?
- java - 未找到类的 Web 服务部署错误
- javascript - 如何在 EJS 中按 MySQL 值显示不同的块?
- python - Python 样式 - 在小数点后添加 0
- python - scipy.optimize.minimize 不会在 maxiter 或回调处停止
- windows - 在 WinSCP 中同步文件掩码 - 将文件过滤器与子目录排除合并
- android - android workmanager 中 RxWorker 的 Observable