2009-08-28 139 views

回答

59

你會使用的form_for的具體型號,

<% form_for @person do |f| %> # you can use f here 

    First name: <%= f.text_field :first_name %> 
    Last name : <%= f.text_field :last_name %> 

<% end %> 

的form_tag創建基本的形式,

<%= form_tag '/person' do -%> 
    <%= text_field_tag "person", "first_name" %> 
<% end -%> 
53

form_for傾向於作爲其第一個參數,一個activerecord對象;它可以輕鬆地進行創建或編輯表單(使用它在一個「新」的觀點,你應該在控制器創建一個空的實例,如:

def new 
    @foo = Foo.new 
end 

它還傳遞了一個表單變量來將擋,使你不需要在表單本身重複模型名稱,它是編寫模型相關表單的首選方式

form_tag只是創建一個表單標籤(當然,默默地準備一個防僞造隱藏字段,如form_for) ;它最適用於非模型表單(實際上我只用它來做簡單的搜索表單等等)。

類似地,form_remote_forform_remote_tag分別適用於模型相關表單而不是模型相關表單,但不是以標準http方法(GET,POST ...)結束,而是調用ajax方法。

所有這一切,更是爲您提供在FormHelperPrototypeHelper參考頁享受。

編輯 2012-07-13

Prototype已經從rails刪除前不久,和遠程形式已經完全改變了。請參閱第一個鏈接,同時選擇form_forform_tag:remote選項。

+0

第二個鏈接不起作用。 – WowBow 2012-07-13 02:59:45

+1

@WowBow你是對的;畢竟,這個答案是相當古老的,Prototype早就從軌道上移除了。我會編輯我的答案。 – giorgian 2012-07-13 11:29:56

+0

這是什麼意思'form_for'「更喜歡」一個ActiveRecord對象? – shiggity 2014-08-21 16:55:24

4

這些應該是相似的:

<% form_for @person do |f| %> 
    <%= f.text_field :name %> 
<% end %> 

和:

<%= form_tag '/person' do %> 
    <%= text_field_tag "person[name]" %> 
<% end %> 

如果你想提交相同的參數給控制器,你必須明確地定義它。

+0

簡潔精確。 [美麗的期限] – 2017-09-08 04:39:40