2014-02-18 41 views
2

我無法理解兩者之間的區別。有人可以解釋使用form_for時的區別嗎?Rails collection_select vs f.collection_select

假設你有這樣的:<%= form_for(@post) do |f| %>

Examples-當你使用它?

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

與使用?

<%= f.collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

Rails Api

+0

f。通常用於指示與其相關的對象的表單,在collection_select標記大小寫中,它將對象作爲f。不需要,我想(這就是爲什麼我要評論:P)這是正確的答案 – maltray

回答

3

當您使用f.some_form_helper助手就已經知道你想爲字段名稱模型的名稱。這樣你可以放棄這個:post參數。 form_for(@post)爲您提供了知道表單適用於哪種模型的表單生成器對象f

對於常規的collection_select(或任何其他幫助f.),您必須將第一個參數作爲字段的名稱傳入。

您的示例有點不合適,因爲您將相同的參數傳遞給了兩者。 f.collection_select不需要:post

這是正確使用f.幫手:

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %> 

這是使用f.輔助校正方式:

<%= f.collection_select(:author_id, Author.all, :id, :name_with_initial, prompt: true) %> 

f對象具有基準回你通過f.object傳遞給form_for的模型。這是如何知道在底層調用collection_select(:post, ...)