我的观点中有以下表格:
<% form_for(@filedata, :url=>{ :controller=>"filedatas", :action=>"create"}, :multipart => true) do |f| %>
<label>Select File</label> : <%#= f.file_field :file %>
<%= file_field_tag 'uploadedFile' %>
<%= f.submit 'Upload' %>
</p>
<% end %>
我已经注释掉了f.file_field,但我已对两者进行了测试,两者都给了我同样的问题。他们只返回文件的名称,我得到一个字符串。像.path和.original_filename这样的方法会导致错误。
在我得到的参数列表中: “UploadedFile的”=&gt; “中测试”
(我的文件名是test.txt)
有人有什么建议吗?
答案 0 :(得分:4)
抱歉,我可能误解了你原来的问题。看起来你的form_for调用中有错误。它应该是:
<% form_for(@filedata, :url=>{ :controller=>"filedatas", :action=>"create"}, :html => {:multipart => true}) do |f| %>
您错过了“:html =&gt; {}”部分。另外,你可以这样缩短它:
<%= form_for @filedata, :html => {:multipart => true} do |f| %>
答案 1 :(得分:0)
这种情况正在发生,因为文件的内容不像其他字段一样存储在属性中。文件内容存储在POST数据中,必须进行检索。需要额外的步骤。
This article解释了手动执行此操作的一种方法。但更好的方法是使用像thoughtbot's paperclip这样的插件为你处理这个问题。