2012-08-15 72 views
5

我想步通過與find_each檢索的記錄列表框。本地跳轉錯誤沒有指定的(收益率)錯誤的find_each

我上構圖的回答我的控制器代碼在這個stack overflow post,但我仍然得到一個「無座鑑於(收益率)」的錯誤。

我剛剛開始在Ruby和Rails,我還沒有找到塊和產量的,給我什麼,我需要一個完全成熟的解釋(許多基本的例子雖然)。

我的代碼如下所示:

def select_save 
    @class = params[:class] 
    @student_id = params[:id] 
    @class.each do |id| 
     old_subject = Subject.find(id) 
     new_subject = old_subject.dup 
     new_subject.student_id = @student_id 
     new_subject.save 
     Assignment.find_each.where(:subject_id => id) do |assignments| 
     assignments.each do |a| 
      new_assignment = a.dup 
      new_assignment.subject_id = new_subject.id 
      new_assignment.save 
     end 
     end 
    end 

    respond_to do |format| 
     format.html { redirect_to @student, :notice => 'Subject and assignments created.' } 
    end 
    end 

和錯誤點與find_each行。

我知道我需要一個塊產生,但究竟會看在這個特殊的情況下,脫離了我。

感謝您的任何建議。

+0

你忽略new_subject.save'的'的返回值。 – meagar 2012-08-15 04:32:31

回答

5

你傳遞給where塊,無塊find_each。你不能那樣做。

Assignment.find_each.where(:subject_id => id) do |assignments| 

它應該閱讀:你需要扭轉find_eachwhere這條線,因爲該塊被傳遞到最後調用的方法的順序很重要

Assignment.where(:subject_id => id).find_each do |assignments| 

你的下一個問題是你」再試圖遍歷assignments,這是一個單一的分配。 find_each已經在做迭代你,傳遞一個分配成塊的時間。此塊應閱讀:

Assignment.where(:subject_id => id).find_each do |assignment| 
    new_assignment = assignment.dup 
    new_assignment.subject_id = new_subject.id 
    new_assignment.save 
end 

我打算讓你的主題有很多作業,因爲你有你的subject_idAssignment裏面的假設。如果是這樣的話,寫你的循環將是最後也是最正確方式:

old_subject.assignments.each do |assignment| 
    new_assignment = assignment.dup 
    new_assignment.subject_id = new_subject.id 
    new_assignment.save 
end 
+0

你設想得很正確。謝謝你的優雅答案。 – lonC 2012-08-17 16:07:28