根据Rails指南和这个 Railscasts插曲,当两个对象(例如和)之间存在一对多关联时,我们可以提交多个实例以及表单提交过程,类似于:ProjectTaskTaskProject
<% 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 %>
Run Code Online (Sandbox Code Playgroud)
这将在表单中生成这样的HTML块的多个副本,每个任务一个:
<p>
Task Name: <input name="project[task_attributes][name]">
Task Duration: <input name="project[task_attributes][duration]">
</p>
Run Code Online (Sandbox Code Playgroud)
我的问题是,Rails如何理解哪些
(project[task_attributes][name], project[task_attributes][duration])
Run Code Online (Sandbox Code Playgroud)
属于一起,并将它们打包成结果数组的哈希元素params?是否保证浏览器必须按照它们在源中出现的顺序发送表单参数?
小智 3
如果您正在处理直接数据并希望在不使用任何这些@objects的情况下发回数组
<%= form_for :team do |t| %>
<%= t.fields_for 'people[]', [] do |p| %>
First Name: <%= p.text_field :first_name %>
Last Name: <%= p.text_field :last_name %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
你的参数数据应该像这样返回
"team" => {
"people" => [
{"first_name" => "Michael", "last_name" => "Jordan"},
{"first_name" => "Steve", "last_name" => "Jobs"},
{"first_name" => "Barack", "last_name" => "Obama"}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5245 次 |
| 最近记录: |