多个对象的表单 - 仅捕获最后一个记录

时间:2015-12-05 10:09:30

标签: ruby-on-rails

我在controller/new中有以下多行记录:

@students = Array.new(quantity) {@stream.students.build}

查看文件:

<%= @errors.inspect %>
<%= form_for :students_list, {:url => create_students_list_stream_url(@stream) } do |students_list_form| %>
<% i=0 %>

<% @students.each do |student| %>
<% i=i+1 %>
<%= students_list_form.fields_for student do |student_form|%>
<%= render :partial => "students/add_students_to_stream", locals: {:student=>student, :student_form=>student_form, :i=>i} %>
<% end %>
<% end %>
<%= students_list_form.submit "Добавить студентов" %>
<% end %>

这为一个输入生成了相当正确的HTML:

    <input id="name-field-1" type="text" name="students_list[student][account_attributes][name]" />
...

请注意,每页可以有多个对象,例如此输入,因为我想创建记录列表。

但是,正如我从服务器日志中看到的那样,Rails得到的params只包含最后一条记录。

例如,我有两个学生的表格&#39;在页面上。

 <input id="name-field-1" type="text" name="student[student][account_attributes][name]" />
 <input id="name-field-2" type="text" name="student[student][account_attributes][name]" />

输入John和Peter的名字,我的服务器日志将显示:

"students_list"=>{"student"=>{"account_attributes"=>{"name"=>"Peter"}}}

就是这样。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您必须添加multiple="multiple"并将名称类型设为数组。

HTML

 <input id="name-field-1" type="text" multiple="multiple" name="student[student][account_attributes][name][]" />

导轨。

<%= form.text_field :object, id: "id", multiple: true %>

因此,对于相同的字段名称,它将返回Array的所有元素。

答案 1 :(得分:0)

字段名称完全相同,名称中没有数组符号,这就是浏览器覆盖它们的原因。

要制作浏览器帖子数组 - 字段最终应命名为students_list[][student][account_attributes][name](请注意其他[],将其放在名称的不同部分,您可以控制哪些元素已分组)

请尝试fields_for 'students_list[]', ...