Rails文件字段被解释为String?

thu*_*rmc 3 ruby ruby-on-rails

我试图提供一个表单字段作为rails网站上的文件输入.我的表单设置如下

<%= form_tag({:action => 'submit_bulk_adjustment',:id => 'uploadForm', :multipart => true}, {:method => :post}) %>
<%= file_field_tag :file, class: "file-selector"  %> ></td>
<%= submit_tag "Submit" %>
Run Code Online (Sandbox Code Playgroud)

该领域还有一些其他形式,但可能不相关.我试图在方法中使用表单字段中的文件(如下所示),我得到错误"未定义的方法`tempfile'为"0033982687_1406831016_BulkTest.csv":字符串".我在这做错了什么?我看到几乎相同的代码在另一个网站上工作.

post = params[:file]

if(post == nil)
    raise NoFilenameEnteredError
end

post_path = post.tempfile.to_path.to_s
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kow 6

:multipart => true应该是第二个选项哈希的一部分,而不是第一个哈希(第一个只是为了URL - 我假设当你提交这个表单时,你实际上在地址栏中看到"&multipart = true"?).另外,正如@Vasseurth所提到的,您需要将表单元素放在连接到表单的块中:

<%= form_tag({:action => 'submit_bulk_adjustment',:id => 'uploadForm'}, {:multipart => true, :method => :post}) do %>
  <%= file_field_tag :file, class: "file-selector"  %>
  <%= submit_tag "Submit" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

此外,默认方法form_tag是POST,因此无需指定.