Rails 文件上传错误“nil:NilClass 的未定义方法‘original_filename’”

Posted

技术标签:

【中文标题】Rails 文件上传错误“nil:NilClass 的未定义方法‘original_filename’”【英文标题】:Rails file upload error "undefined method `original_filename' for nil:NilClass" 【发布时间】:2011-12-20 07:09:08 【问题描述】:

我有简单的上传表单:

<%= form_for(:product, :url => :action => 'update_product', :id => @product.id, :html => :multipart => true) do |f| %>
<%= f.file_field(:product_image) %>
<%= submit_tag('Upload') %>
<% end %>

在控制器中:

def update_product
    product = Product.find(params[:id])
    if(product)
        uploaded_image = params[:product][:product_image]
        params[:product][:product_image] = uploaded_image.original_filename
        product.update_attributes(params[:product])
        flash[:notice] = "Successfully updated!"
        redirect_to :action => 'edit_product', :id => product.id
    end
end

当我尝试上传时,出现错误“nil:NilClass 的未定义方法 `original_filename'” 我做错了什么?

我使用 Rails 3.0.10 和 Ruby 1.9.2p290

【问题讨论】:

【参考方案1】:

请删除此行:

params[:product][:product_image] = uploaded_image.original_filename

def update_product
    product = Product.find(params[:id])
    if(product)
        uploaded_image = params[:product][:product_image].original_filename
        product.update_attributes(params[:product])
        flash[:notice] = "Successfully updated!"
        redirect_to :action => 'edit_product', :id => product.id
    end
end

【讨论】:

【参考方案2】:

我有这种症状,但间歇性。有时浏览器(chrome)似乎没有从“选择文件”对话框中选择文件。有一次我看到在对话框中双击一个文件后,需要几秒钟才能在浏览器窗口中显示为选定的文件。我想如果您在有效选择文件之前点击“提交”,那么您将收到该错误。

     <h2>Choose file to upload ...</h2>
<%= form_tag(:action => :sched_file_uploader, :multipart => true) do %>
  <%= file_field_tag 'schedfile' %>
  </br></br>
  <%= text_area_tag(:file_info, "<care to say anything about this file?>", :size => "24x6") %>
  </br></br>
  <input name="upload" type="submit" value="Upload" />
<% end %>

【讨论】:

【参考方案3】:

我的猜测是 params[:product][:product_image] 为 nil。

尝试使用 gem 进行文件上传。

来源

1.Paperclip

2.Carrierwave

【讨论】:

以上是关于Rails 文件上传错误“nil:NilClass 的未定义方法‘original_filename’”的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Rails 4.2.5.1 后 nil:NilClass 的未定义方法“缓存”

将 Bootstrap 导入 Rails 时,nil:NilClass 的未定义方法“环境”

ruby on rails错误undefined method `title&#39; for nil:NilClass

Rails 3.1 脚手架未定义方法“model_name”为 nil:NilClass

Rails Event EventType模型关联 - nil的未定义方法`title':NilClass

部署到Heroku:NoMethodError:nil:NilClass的未定义方法'+'