このコードは、新しいチャレンジを保存すると実行され、関連付けられたすべてのユーザーをループしてチャレンジの日ごとにデータポイントを作成します。Railsはネストされていて、最上位レベルの変数にアクセスすることはできません
コホートとデータポイントはこの関数で正常に保存されますが、最初のループの変数|user|
は入れ子になったループでは機能しません。したがって、データポイントが保存されると、すべてが:user_id
になりません。
私はちょうどスコープについての何か、あるいは多分.each
と.each_with_index
の振る舞いを見逃していると思いますが、問題を理解できないようです。
コントローラは、スニペット:あなたが行うことができます実際にDatapoint
belongs_to user
場合は整数
datapoint = Datapoint.new(:user_id => user, :challenge_id => @challenge.id, :date => day, :day => day_count)
に複雑なオブジェクトを割り当てているので
# loop through all associated users
@user_list.each do |user|
# create join
cohort = Cohort.new(:user_id => user, :challenge_id => @challenge.id)
if cohort.valid?
cohort.save
else
@errors += cohort.errors
end
# for each date in range create an empty Datapoint
date_range.each_with_index do |day, index|
day_count = index + 1
datapoint = Datapoint.new(:user_id => user, :challenge_id => @challenge.id, :date => day, :day => day_count)
if datapoint.valid?
datapoint.save
else
@errors += datapoint.errors
end
end
end
「date_range」はどこで定義されていますか? –
また、 'Datapoint.new(:user_id => user、:challenge_id => @ challenge.id、:date => day、:day => day_count)の' user'に '.id'を追加しようとしましたか? '? –
@JamesMilaniそれはそれだった。ありがとう! – kbpeterson