我们正在运行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>
答案 0 :(得分:7)
在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没有任何魔力,所以如果属性在那里,你就会很好。