我正在尝试提供一个表单字段作为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
答案 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,因此无需指定。