2017-03-24 56 views
0

當我保存一個新的挑戰時,該代碼會執行,然後循環遍歷所有關聯的用戶併爲挑戰中的每一天創建數據點。Rails嵌套。每個不能訪問頂級變量

羣組和數據點在此函數中保存得很好,但第一個循環的|user|變量在嵌套循環中不起作用。所以當Datapoints得到保存時,他們都缺少:user_id

我很確定我只是缺少一些關於範圍,或可能是.each.each_with_index行爲的不同方式,但我似乎無法弄清楚問題所在。

控制器片段:

# 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)中爲用戶添加'.id'。 '? –

+0

@JamesMilani就是這樣。謝謝! – kbpeterson

回答

0

該位是錯誤的,因爲你要指定一個複雜的對象爲整數

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

如果Datapoint實際上belongs_to user你可以做

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