深入了解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其他问题,但我还没弄清楚这对我有什么帮助。
我做错了什么?我的表单错了还是我的控制器方法?任何帮助表示赞赏。
答案 0 :(得分:2)
尝试更改为
params[:picture]
始终可以查看日志以查看请求参数哈希的结构。当你在rails中使用form_for时,让我们说一下如下的客户对象。然后,您将字段显示为
[:customer][:field_name]
但是因为你刚刚使用了form_tag帮助器,所以它没有被另一个哈希包围:
<%= form_for @customer do |f| %>
<%= f.text_field :field_name %>
<% end %>