【问题标题】:Form upload "undefined method `[]' for nil:NilClass"表单上传“nil:NilClass的未定义方法`[]'”
【发布时间】:2012-10-17 18:23:04
【问题描述】:

深入研究 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

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

上传文件时出现此错误:

undefined method `[]' for nil:NilClass

指的是我上面标记的那一行。

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

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

【问题讨论】:

  • 向我们展示您的params 在您的控制器第一行params.inspect 上执行此操作并与我们分享params 的内容

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


【解决方案1】:

尝试更改为

params[:picture]

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

[:customer][:field_name] 

但是由于您只是使用了 form_tag 助手,它没有被封装在另一个哈希中:

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

【讨论】:

  • 我尝试将其更改为params[:picture],但这并没有改变任何东西。我也想不用模型,只使用 form_tag。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多