Rails file_field没有返回original_filename

时间:2010-01-26 01:43:55

标签: ruby-on-rails

我的观点中有以下表格:

<% 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)

有人有什么建议吗?

2 个答案:

答案 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这样的插件为你处理这个问题。