Ceci est, espérons un slam dunk pour un maven Rails:Rails 2: utiliser form_for pour construire une forme couvrant plusieurs objets de la même classe
J'ai une forme qui est censé itérer sur un ensemble de LineItems
et de recueillir informations sur chacun. Je suis en train de faire form_for
et fields_for
pour créer les noms de champs appropriés et les paramètres pour donner mon contrôleur une chose de hachage params comme
params[:line_items] = { <line_item.id> => { :rma_reason => "some string", :rma_qty => 2 } }
Ce que j'est:
<% 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 %>
Et le code HTML résultant ressemble (ce que vous attendez, je suppose):
<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" />
Cependant ce que je suis en train de faire (et faili Pour trouver une solution au-delà du retour aux balises HTML ad-hoc), les noms de champ sont indexés par line_item.id
, par ex. line_item [1928] [rma_qty] par exemple. Cela permettrait à mon contrôleur d'itérer sur chaque ligne_item et de le mettre à jour avec les paramètres donnés.
- ... peut-être dans une interface utilisateur pur REST, la forme doit être liée à une instance de
LineItem
, et la norme form_for fonctionnerait - mais l'utilisateur doit être en mesure de soumettre tous les changements à la fois avec une forme . C'est possible?
qui ne m'a pas obtenu le line_item.id dans les params, mais tu avais raison et ça m'a permis de trouver la façon dont fields_for fonctionne réellement - même si ça semble toujours très étrange parfois - merci! – sbeam
@sbeam mon mauvais, il me manquait le premier param pour 'fields_for'. Je pense que l'utilisation de symboles pour les références de modèles dans ces aides est légèrement plus lisible. –