保存多个对象和`stringify_keys'错误。需要帮助

时间:2012-07-17 17:56:23

标签: ruby-on-rails ruby-on-rails-3

当我试图保存多个对象时,我收到了下一个错误:

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

1 个答案:

答案 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