我们正在运行 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 下运行(因此可能只是一个保留)。但是考虑到 SO 上的所有其他示例,包括 :multipart
,我想在我之前更好地了解 :multipart
是否或何时需要 form_for
删除它以及我可能遇到的副作用。
最佳答案
在 Rails 3.1 及更高版本中不需要它,只要您像这样使用 form_for
和 file_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 没有做任何神奇的事情,所以如果有该属性,就没问题。
关于ruby-on-rails - form_for指定 ":html => { :multipart => true}"是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320547/