表单上传“未定义的方法`[]'为nil:NilClass”

时间:2012-10-27 22:18:32

标签: ruby-on-rails ruby forms upload controller

深入了解Rails的上传功能并实际关注this railsguide。

我将以下代码用于上传表单

<%= form_tag({ action: :upload }, multipart: true) do %>
    <%= file_field_tag :picture %>
    <%= submit_tag %>
<% end %>

这是我的上传方法

def upload
    uploaded_io = params[:customer][:picture]     #erroneous line!!
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
      file.write(uploaded_io.read)
    end
    flash[:notice] = "File uploaded successfully!"
    redirect_to root_path
end

我在第二个代码段中标记了我认为错误的行。上传方法只是从railsguide粘贴,我将params数组调整为[:customer]。

上传文件时出现此错误:

undefined method `[]' for nil:NilClass

它指的是我在上面标记的行。

我还发现了this其他问题,但我还没弄清楚这对我有什么帮助。

我做错了什么?我的表单错了还是我的控制器方法?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

尝试更改为

params[:picture]

始终可以查看日志以查看请求参数哈希的结构。当你在rails中使用form_for时,让我们说一下如下的客户对象。然后,您将字段显示为

[:customer][:field_name] 

但是因为你刚刚使用了form_tag帮助器,所以它没有被另一个哈希包围:

<%= form_for @customer do |f| %>
 <%= f.text_field :field_name %>
<% end %>