Dies ist hoffentlich ein Slam Dunk für eine Rails Maven:Rails 2: verwenden form_for eine Form des für mehrere Objekte der gleichen Klasse zu bauen
Ich habe eine Form, die eine Reihe von LineItems
iterieren sollte und sammeln Informationen zu jedem. Ich versuche, form_for
zu bekommen und fields_for
die richtigen Feldnamen und Parameter zu erstellen meinem Controller ein params-Hash so etwas wie
params[:line_items] = { <line_item.id> => { :rma_reason => "some string", :rma_qty => 2 } }
zu geben, was ich habe, ist:
<% form_for(@object) do |rma_form| %>
<% @order.line_items.each do |item| %>
....
<% fields_for item do |item_f| %>
<%= item_f.text_area :rma_reason %>
<%= item_f.text_field :rma_qty, :value => item.quantity, :size=>3 %>
<% end %>
....
<% end %>
<% end %>
und das resultierende HTML aussieht (was man erwarten würde, glaube ich):
<textarea id="line_item_id" name="line_item[id]"></textarea>
<input id="line_item_rma_qty" name="line_item[rma_qty]" size="3" type="text" value="1" />
jedoch, was ich versuche (und faili zu bekommen ng, um eine Lösung zu finden, die über die Ad-hoc-HTML-Tags hinausgeht) sind Feldnamen, die durch line_item.id
, z.B. line_item [1928] [rma_qty] zum Beispiel. Dies würde meinem Controller erlauben, über jedes line_item zu iterieren und es mit den gegebenen Parametern zu aktualisieren.
- ... vielleicht in einem reinen REST UI sollte die Form auf eine Instanz von
LineItem
gebunden werden, und die Standard-form_for funktionieren würde - aber sollte der Benutzer alle Änderungen auf einmal mit einer Form einreichen können, . Ist es möglich?
das brachte mir nicht die line_item.id in den params, aber du hattest recht und es bringt mich auf die Straße herauszufinden, wie fields_for tatsächlich funktioniert - obwohl es manchmal immer noch sehr seltsam scheint - danke! – sbeam
@Strahl meine schlechte, mir fehlte der erste Parameter für 'fields_for'. Ich denke, die Verwendung von Symbolen für Modellreferenzen in diesen Helfern ist etwas besser lesbar. –