【问题标题】:Rails file upload error "undefined method `original_filename' for nil:NilClass"Rails 文件上传错误“nil:NilClass 的未定义方法‘original_filename’”
【发布时间】: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

【问题讨论】:

    标签: ruby-on-rails file upload


    【解决方案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

        【讨论】:

          猜你喜欢
          • 2019-10-09
          • 2012-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多