Rails文件字段被解释为String?

时间:2014-07-31 18:55:37

标签: ruby-on-rails ruby

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

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

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

post = params[:file]

if(post == nil)
    raise NoFilenameEnteredError
end

post_path = post.tempfile.to_path.to_s

1 个答案:

答案 0 :(得分:6)

:multipart => true应该是第二个选项哈希的一部分,而不是第一个哈希(第一个只是用于URL - 我假设当你提交这个表单时,你实际上看到的是&amp; 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 %>

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