当我试图保存多个对象时,我收到了下一个错误:
undefined method `stringify_keys' for #<Array...>
有关如何处理它的任何想法? 我的意见:
控制器:
def create
@course = Course.find(params[:course_id])
@students = @course.users
@students.each do
@grade = @course.grades.build(params[:grade])
end
@grade.each { |a| a.save }
end
_form.html.erb:
<%= form_for ([@course, @grade]) do |f| %>
....
<% @students.each do |a| %>
<tr>
<td><%= a.last_name %><%= a.first_name %>
<%= f.hidden_field :student_id, :value => a.id, :index => @grade.id %></td>
<td><%= f.text_field :grade_evaluation, :index => @grade.id %></td>
<td><%= f.text_field :comment, :index => @grade.id %></td>
</tr>
....
这给了我下一个params hash for grade:
{....
"grade"=>[
{"student_id"=>"1",
"grade_evaluation"=>"5",
"comment"=>"you are an idiot" },
{"student_id"=>"4",
"grade_evaluation"=>"5",
"comment"=>"you too" }],
"commit"=>"Create",
"course_id"=>"3"}
答案 0 :(得分:0)
你正在迭代成绩,但不是在这里输入参数:
@students.each do
@grade = @course.grades.build(params[:grade])
end
(注意,对于传递整个数组的每个元素,不是数组元素。)
EVENTUALLY这应该是这样的(但这不是一个很好的解决方案,但它会解决你的问题)。
params[:grade].each do |grade_params|
grade = @course.grades.build(grade_params)
end
看一下嵌套属性,这是你想要的定义:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html