我在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"}}}
就是这样。
答案 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[]', ...