ruby-on-rails - form_for指定 ":html => { :multipart => true}"是否正确?

标签 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 下运行(因此可能只是一个保留)。但是考虑到 SO 上的所有其他示例,包括 :multipart,我想在我之前更好地了解 :multipart 是否或何时需要 form_for删除它以及我可能遇到的副作用。

最佳答案

在 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 没有做任何神奇的事情,所以如果有该属性,就没问题。

关于ruby-on-rails - form_for指定 ":html => { :multipart => true}"是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320547/

相关文章:

ruby-on-rails - Rails 自定义验证有错误但仍然保存?

mysql - 获取事件记录中组的第一个子项

ruby - 如何在嵌套的 Rspec 共享示例中传递两个级别的变量?

Ruby 作用域:MyClass.new 和::MyClass.new 之间的区别

jquery - 在 ajax 请求中发布长嵌套列表时堆栈级别太深

java - android/rails 分段上传问题

ruby-on-rails - 我正在使用 Carrierwave 上传 XML 文件。 XML 已上传,看起来正常但未被读取

ruby-on-rails - 在 OSX 10.9 Mavericks 错误崩溃报告上运行 Rails 的应用程序时出错

ruby - 在 Ruby 中使用 Savon gem 与 SOAP 服务对话

javascript - Rack-Cors 并在 500 或 403 错误时发送 header