指定":html =>是否正确? {:multipart =>真}" for form_for?

时间:2014-10-12 00:11:08

标签: ruby-on-rails ruby rack form-for multipartform-data

我们正在运行Rails 3.2.19和Ruby 2.1.2。

我们有一个传统的代码行(实际上,不止一行,但这一行特别值得关注)读取

form_for [@commentable, @comment], :html => { :multipart => true, :class => "lightbox_form"} do |f|

表单数据可能包含也可能不包含由用户自行决定的上传文件。

SO中的很多示例都指的是指定:multipart设置,但后来我在Form_for with :multipart => true spits out看到了这个答案,然后在查看http://guides.rubyonrails.org/v3.2.19/form_helpers.html#uploading-files处的文档时,我发现它应该是'是必要的(除非使用form_tag)。我也在https://github.com/rails/rails/issues/10176看到这个讨论,这增加了我的困惑。

我问的部分是因为我们在Rack中遇到了EOF错误(多部分解析器没有内容;如果您对这些细节感兴趣,请参阅Rack throwing EOFError (bad content body))。

我们的代码可能以前在早期版本的Rails中运行时可能是必要的(因此可能只是一个保留)。但考虑到包含:multipart的SO上的所有其他示例,我想更好地了解:multipart是否或何时需要form_for才能删除它以及我可能遇到的副作用。< / p>

1 个答案:

答案 0 :(得分:7)

在Rails 3.1及更高版本中不需要它,只要您将form_forfile_field一起使用,就像这样:

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

这不起作用:

<%= form_for @person do |f| %>
  <%= file_field_tag 'person[picture]' %>
<% end %>

您可以轻松验证它是否有效。检查生成的HTML并在表单标记上查找enctype="multipart/form-data"属性。除了设置编码类型之外,Rails没有任何魔力,所以如果属性在那里,你就会很好。