我正试图为老师们提供一份能同时创造出多个学生的表格。似乎大多数人使用嵌套属性来处理这个概念,但是当我只使用单个模型时,我很难理解它是如何工作的。这篇文章使得在没有嵌套属性的情况下实现这一目标似乎是可能的,但我的结果并不像作者所建议的那样工作。should数组应该包含表单的每个部分的一个散列。但是,当我提交表单并检查参数时,数组中只存在一个散列。
调整她的方法,我有一个控制器:
students_controller.rb
def multi
@student_group = []
5.times do
@student_group << Student.new
end
end(我使用的是一个我称之为“多重”的动作,因为它与常规的“创建”动作不同,后者一次只创建一个学生。我试着把所有的东西都转移到常规的create操作中,但是我得到了相同的结果。)
意见:
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>只有一个包括了一个名为"fff ggg“的学生。对于不同的学生,应该有另外四个杂音。
预先感谢您的任何见解。
发布于 2016-08-18 22:14:03
fields_for仅与form_for一起使用。for指的是一个模型,它希望您使用该模型。因为您试图构建一个没有模型的表单,所以您必须构建自己的输入字段名。
不要使用fields_for,而是使用表单标记帮助器呈现每个输入。
<%= label_tag "students__first_name", "First Name" %>
<%= text_field_tag "students[][first_name]" %>...and等。
关键是字段名中有这个[],以指示学生参数将是一个散列数组。您几乎可以通过告诉fields_for被称为students[]来获得它,但是fields_for忽略了它,因为它需要一个模型才能正常工作。
https://stackoverflow.com/questions/39027715
复制相似问题