Secondo l'episodio Rails Guides e this Railscasts, quando c'è un uno-a-molti associazione tra due oggetti (ad esempio Project
e Task
), siamo in grado di presentare più istanze di Task
insieme al Project
durante modulo di presentazione simile a questo:In che modo Rails raggruppa matrici di hash durante l'invio del modulo?
<% form_for :project, :url => projects_path do |f| %>
<p>
Name: <%= f.text_field :name %>
</p>
<% for task in @project.tasks %>
<% fields_for "project[task_attributes][]", task do |task_form| %>
<p>
Task Name: <%= task_form.text_field :name %>
Task Duration: <%= task_form.text_field :duration %>
</p>
<% end %>
<% end %>
<p><%= submit_tag "Create Project" %></p>
<% end %>
questo sarà il risultato più copie di un blocco HTML come questo in forma, uno per ogni attività:
<p>
Task Name: <input name="project[task_attributes][name]">
Task Duration: <input name="project[task_attributes][duration]">
</p>
La mia domanda è, come fa Rails capire quali
(project[task_attributes][name], project[task_attributes][duration])
appartengono insieme, e li imballaggio in un elemento di un hash della matrice con conseguente params
? È garantito che i browser debbano inviare i parametri del modulo nello stesso ordine in cui appaiono nella sorgente?
Duh! Ho appena trovato la risposta [qui] (http://stackoverflow.com/questions/3300201/does-dom-order-determine-the-order-of-form-parameters-posted). Apparentemente questo è richiesto dallo standard. –