Unterschied zwischen form_for, form_tag?

80

Was ist der Unterschied zwischen form_for und form_tag? Ist etwas anders für form_remote_for und form_remote_tag?

Devinross
quelle

Antworten:

63

Sie würden form_for für ein bestimmtes Modell verwenden.

<% 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 Grundform erstellen,

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

form_forbevorzugt als erstes Argument ein Activerecord-Objekt; Es ermöglicht das einfache Erstellen oder Bearbeiten eines Formulars (um es in einer "neuen" Ansicht zu verwenden, sollten Sie eine leere Instanz im Controller erstellen, z.

def new
  @foo = Foo.new
end

Außerdem wird eine Formularvariable an den Block übergeben, sodass Sie den Modellnamen nicht innerhalb des Formulars selbst wiederholen müssen. Dies ist die bevorzugte Methode zum Schreiben eines modellbezogenen Formulars.

form_tagerstellt einfach ein Formular-Tag (und bereitet natürlich stillschweigend ein verstecktes Feld gegen Fälschungen vor form_for). Es wird am besten für Nichtmodellformulare verwendet (ich verwende es eigentlich nur für einfache Suchformulare oder ähnliches).

In ähnlicher Weise form_remote_forund form_remote_tagfür Modell verwandten Formen geeignet sind und nicht verwandten Formen modellieren jeweils aber, statt in einem Standard - HTTP - Methode endet (GET, POST ...), rufen sie eine Ajax - Methode.

All dies und noch viel mehr stehen Ihnen im FormHelper zur Verfügung und PrototypeHelper Referenzseiten.

EDIT 2012-07-13

Prototypewurde vor railslanger Zeit entfernt und entfernte Formulare haben sich vollständig geändert. Bitte beziehen Sie sich auf den ersten Link, mit Rücksicht auf die :remoteOption von sowohl form_forals auch form_tag.

Giorgian
quelle
1
@ WowBow du hast recht; Immerhin ist diese Antwort ziemlich alt und der Prototyp wurde vor langer Zeit von den Schienen entfernt. Ich werde meine Antwort bearbeiten.
Giorgian
Was bedeutet es, dass form_forein ActiveRecord-Objekt "bevorzugt" wird?
Shiggity
1
@shiggity: Es akzeptiert natürlich auch ein Symbol oder eine Zeichenfolge. Bei einem ActiveRecord-Objekt ist es jedoch das Richtige.
Giorgian
4

Diese sollten ähnlich sein:

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

und:

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

Wenn Sie dieselben Parameter an den Controller senden möchten, müssen Sie dies explizit definieren.

Matthias
quelle
Kurz und präzise. [Schöne Sühne]
Dänischer Absar