0

深入研究 Rails 的上传功能并实际遵循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

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

我还发现另一个问题,但我还没有弄清楚这对我有什么帮助。

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

4

1 回答 1

2

尝试更改为

params[:picture]

可以随时查看日志以了解请求参数哈希的结构。当您在 rails 中使用 form_for 时,假设在下面的客户对象上。然后你得到的字段为

[:customer][:field_name] 

但是由于您只是使用了 form_tag 帮助程序,因此它没有包含在另一个哈希中:

<%= form_for @customer do |f| %>
 <%= f.text_field :field_name %>
<% end %>
于 2012-10-27T22:37:18.603 回答