2009-08-28 23 views

Odpowiedz

59

byłoby użyć form_for konkretnego modelu,

<% 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 tworzyć formę podstawową,

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

form_for preferuje, jako swój pierwszy argument, obiekt aktywnego rekordu; pozwala to łatwo zrobić utworzyć lub edytować formę (by użyć go w „nowej” widzenia należy utworzyć pusty instancji w sterowniku, jak:

def new 
    @foo = Foo.new 
end 

przechodzi również tworzą zmienną do bloku, tak że nie trzeba powtarzać nazwę modelu w samej formie. jest to preferowany sposób napisać wzoru formularza powiązane.

form_tag właśnie tworzy znaki formularz (i oczywiście po cichu przygotowuje ukryte pole zabezpieczającym, jak form_for) , jest najlepiej używany do formularzy niemodelowych (w rzeczywistości używam go tylko do prostych formularzy wyszukiwania itp.).

Podobnie, i form_remote_tag są odpowiednie dla form powiązanych z modelem, a nie z odpowiednimi modelami, ale zamiast wywoływania standardowej metody http (GET, POST ...), wywołują metodę ajaxową.

Wszystko to i wiele więcej są dostępne, aby cieszyć się w kartach referencyjnych FormHelper i PrototypeHelper.

EDIT 2012-07-13

Prototype została usunięta z rails dawno temu, a zdalne formy zostały całkowicie zmienione. Proszę odnieść się do pierwszego linku, z reguard do opcji :remote zarówno z form_for i form_tag.

+0

Drugi link nie działa. – WowBow

+1

@WowBow masz rację; w końcu ta odpowiedź jest dość stara, a prototyp został usunięty z szyn już dawno temu. Będę edytować moją odpowiedź. – giorgian

+0

Co to znaczy, że 'form_for'" preferuje "obiekt ActiveRecord? – shiggity

4

te powinny być podobne:

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

oraz:

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

Jeśli chcesz przesłać te same parametry do kontrolera, musisz to jawnie zdefiniować.

+0

Krótki i precyzyjny. [Piękna ekspiacja] –