2014-10-12 63 views
2

我們正在運行Rails 3.2.19和Ruby 2.1.2。對於form_for指定「:html => {:multipart => true}」是否正確?

我們的代碼的傳統線路(實際上,不止一個,但此行是特別值得關注的),上面寫着

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

表單數據可能會或可能不包括在上傳的文件用戶的自由裁量權。

中這樣的例子很多參考指定: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看到這個討論增加了我的困惑。

我在問部分是因爲我們在機架中出現EOF錯誤(沒有內容通過多部分解析器;如果您對這些細節感興趣,請參閱Rack throwing EOFError (bad content body))。

我們的代碼可能以前在Rails的早期版本中運行時,它可能是必要的(因此可能只是一個保留)。但考慮到所有其他示例,包括:multipart,我想更好地瞭解是否或何時使用:multipartform_for,然後再將其刪除,以及我可能遇到哪些副作用。

回答

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沒有任何魔法,所以如果屬性在那裏,那你就很好。

+0

謝謝你的回覆。那麼看起來,添加':multipart'對於'form_for'來說是無關緊要的(根據你給出的條件)。還是它實際上改變了包含它的行爲,如果沒有其他需要的話(比如當它可能不被使用時強制多部分)? – rdnewman 2014-10-13 16:59:49

+0

包括它會將表格設置爲始終爲多部分,即使沒有必要。如果沒有,只有在form_builder.file_field觸發multipart模式時纔會設置該屬性。 – elektronaut 2014-10-15 12:46:27

相關問題