0

当我尝试保存多个对象时,出现下一个错误:

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>
....

这给了我下一个参数哈希等级:

  {....

 "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"}
4

1 回答 1

0

您正在迭代成绩,但不是在这里输入参数:

@students.each do
 @grade  = @course.grades.build(params[:grade])
end

(注意,对于每个元素,您传递的是整个数组,而不是数组元素)。

最终这应该看起来像这样(但这不是一个很好的解决方案,但它会解决你的问题)。

params[:grade].each do |grade_params|
 grade  = @course.grades.build(grade_params)
end

看看嵌套属性,这绝对是你要找的东西: http: //api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2012-07-17T18:13:22.023 回答