Jaka jest różnica między form_for i form_tag? Czy jest coś innego dla form_remote_for i form_remote_tag?
źródło
Jaka jest różnica między form_for i form_tag? Czy jest coś innego dla form_remote_for i form_remote_tag?
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_for
preferuje 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_tag
po 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_for
i form_remote_tag
są 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
Prototype
został usunięty rails
dawno temu, a odległe formy całkowicie się zmieniły. Proszę zapoznać się z pierwszym linkiem, zwracając uwagę na :remote
opcję obu form_for
i 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ć.
źródło