Jaka jest różnica między form_for i form_tag? Czy jest coś innego dla form_remote_for i form_remote_tag?
Odpowiedzi:
Użyłbyś form_for dla 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 podstawowy formularz,
<%= form_tag '/person' do -%>
<%= text_field_tag "person", "first_name" %>
<% end -%>
form_forpreferuje jako pierwszy argument obiekt activerecord; pozwala na łatwe tworzenie lub edycję formularza (aby użyć go w „nowym” widoku należy utworzyć pustą instancję w kontrolerze, np .:
def new
@foo = Foo.new
end
Przekazuje również zmienną formularza do bloku, dzięki czemu nie trzeba powtarzać nazwy modelu w samym formularzu. jest to preferowany sposób pisania formularza związanego z modelem.
form_tagpo prostu tworzy tag formularza (i oczywiście po cichu przygotowuje ukryte pole zabezpieczające przed fałszerstwem form_for); najlepiej nadaje się do nie-modelowych formularzy (właściwie używam go tylko do prostych formularzy wyszukiwania itp.).
Podobnie, form_remote_fori form_remote_tagsą odpowiednie dla formularzy związanych z modelem , a nie odpowiednio dla formularzy związanych z modelem, ale zamiast kończyć się standardową metodą http (GET, POST ...), wywołują metodę ajax.
Wszystko to i wiele więcej jest dostępnych w FormHelper i PrototypeHelper strony odniesienia.
EDYCJA 2012-07-13
Prototypezostał usunięty railsdawno temu, a odległe formy całkowicie się zmieniły. Proszę zapoznać się z pierwszym linkiem, zwracając uwagę na :remoteopcję obu form_fori form_tag.
form_for„preferuje” obiekt ActiveRecord?
Powinny być podobne:
<% form_for @person do |f| %>
<%= f.text_field :name %>
<% end %>
i:
<%= form_tag '/person' do %>
<%= text_field_tag "person[name]" %>
<% end %>
Jeśli chcesz przesłać te same parametry do kontrolera, musisz to wyraźnie zdefiniować.