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

これにより、グレードの次の params ハッシュが得られます。

  {....

 "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 に答える