Rails多记录表单仅保存最后记录的参数

我正在努力为教师提供一个可以同时创建多个学生的表格。 似乎大多数人都使用嵌套属性来处理这个概念,但是当我只使用单个模型时,我很难理解它是如何工作的。 这篇文章似乎可以在没有嵌套属性的情况下实现这一点,但我的结果并不像作者所建议的那样工作。 学生数组应该为表单的每个部分包含一个哈希。 但是当我提交表单并检查参数时,数组中只存在一个哈希值。

调整她的方法,我有这个控制器:

students_controller.rb

def multi @student_group = [] 5.times do @student_group << Student.new end end 

(我正在使用一种我称之为“多”的动作,因为它与常规的“创建”动作不同,后者一次只创建一个学生。我已经尝试将所有内容都移动到常规创建动作中,但我得到相同的结果。)

风景:

multi.html.erb

    


结果:

 (byebug) params "✓", "authenticity_token"=>"3Xpi4XeqXuPs9jQvevy+nvGB1HiProddZzWq6Ed7Oljr3TR2fhx9Js6fN/F9xYcpgfDckCBOC2CoN+MrlFU0Bg==", "students"=>{"first_name"=>"fff", "last_name"=>"ggg"}, "commit"=>"Save changes", "controller"=>"students", "action"=>"create"} permitted: false> 

名为“fff ggg”的学生只包含一个。 应该有四个不同学生的其他哈希。

提前感谢您的任何见解。

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忽略它,因为它需要一个模型才能正常工作。