我试图为教师提供一个可以同时创建多个学生的表格。似乎大多数人都使用嵌套属性来处理这个概念,但是当我只使用单个模型时,我很难理解它是如何工作的。 This article似乎可以在没有嵌套属性的情况下实现这一点,但我的结果并不像作者所建议的那样工作。学生数组应该为表单的每个部分包含一个哈希。但是当我提交表单并检查参数时,数组中只存在一个哈希值。
调整她的方法,我有这个控制器:
students_controller.rb
def multi
@student_group = []
5.times do
@student_group << Student.new
end
end
(我正在使用我称之为&#34;多&#34的操作;因为它与常规&#34;创建&#34;操作不同,只会创建一次一个学生。我已经尝试将所有内容都移到常规创建操作中,但我得到的结果相同。)
观点:
multi.html.erb
<%= form_tag students_path do %>
<% @student_group.each do |student| %>
<%= fields_for 'students[]', student do |s| %>
<div class="field">
<%= s.label :first_name %><br>
<%= s.text_field :first_name %>
</div>
<div class="field">
<%= s.label :last_name %><br>
<%= s.text_field :last_name %>
</div>
<% end %>
<% end %>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
结果:
(byebug) params
<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"3Xpi4XeqXuPs9jQvevy+nvGB1HiProddZzWq6Ed7Oljr3TR2fhx9Js6fN/F9xYcpgfDckCBOC2CoN+MrlFU0Bg==", "students"=>{"first_name"=>"fff", "last_name"=>"ggg"}, "commit"=>"Save changes", "controller"=>"students", "action"=>"create"} permitted: false>
名为&#34; fff ggg&#34;的学生只包括一个。应该有四个不同学生的其他哈希。
提前感谢您的任何见解。
答案 0 :(得分:2)
fields_for
仅与form_for
一起使用。 for
指的是一个模型,它希望您使用它。由于您正在尝试构建没有模型的表单,因此必须构建自己的输入字段名称。
请勿使用fields_for
,而是使用表单标记帮助器呈现每个输入,例如
<%= label_tag "students__first_name", "First Name" %>
<%= text_field_tag "students[][first_name]" %>
......等等。
关键是字段名称中包含[]
,表示学生参数将是一个哈希数组。你差不多通过告诉fields_for
被称为students[]
但fields_for
忽略了它,因为它需要一个模型才能正常工作。