2017-03-24 4 views
0

このコードは、新しいチャレンジを保存すると実行され、関連付けられたすべてのユーザーをループしてチャレンジの日ごとにデータポイントを作成します。Railsはネストされていて、最上位レベルの変数にアクセスすることはできません

コホートとデータポイントはこの関数で正常に保存されますが、最初のループの変数|user|は入れ子になったループでは機能しません。したがって、データポイントが保存されると、すべてが:user_idになりません。

私はちょうどスコープについての何か、あるいは多分.each.each_with_indexの振る舞いを見逃していると思いますが、問題を理解できないようです。

コントローラは、スニペット:あなたが行うことができます実際にDatapointbelongs_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 
+0

「date_range」はどこで定義されていますか? –

+0

また、 'Datapoint.new(:user_id => user、:challenge_id => @ challenge.id、:date => day、:day => day_count)の' user'に '.id'を追加しようとしましたか? '? –

+0

@JamesMilaniそれはそれだった。ありがとう! – kbpeterson

答えて

0

このビットが間違っている

datapoint = Datapoint.new(:user => user, :challenge_id => @challenge.id, :date => day, :day => day_count) 

しかし、belongs_toが定義されていない場合は、ユーザーのIDだけ

datapoint = Datapoint.new(:user_id => user.id, :challenge_id => @challenge.id, :date => day, :day => day_count) 
+0

それを修正したIDを追加していました。本当にありがとう! – kbpeterson

関連する問題