我正在尝试逐步浏览使用 find_each 检索到的记录列表。
我根据此 stack overflow post 中的答案构建了我的 Controller 代码。 ,但我仍然收到“没有给出 block (产量)”错误。
我刚刚开始接触 Ruby 和 Rails,还没有找到关于 block 和产量的完整解释(尽管有很多基本示例)来满足我的需要。
我的代码如下所示:
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 所在行。
我知道我需要一个 block 来屈服,但在这种特殊情况下它到底是什么样子的我却无法理解。
感谢您的任何建议。
最佳答案
您正在向 where
传递一个 block ,而没有向 find_each
传递任何 block 。你不能那样做。您需要反转此行中的 find_each
和 where
,顺序很重要,因为该 block 将传递到最后调用的方法:
Assignment.find_each.where(:subject_id => id) do |assignments|
它应该是:
Assignment.where(:subject_id => id).find_each do |assignments|
您的下一个问题是您尝试迭代分配
,这是一个单一的分配。 find_each
已经为您进行了迭代,一次将一个赋值传递到 block 中。该 block 应为:
Assignment.where(:subject_id => id).find_each do |assignment|
new_assignment = assignment.dup
new_assignment.subject_id = new_subject.id
new_assignment.save
end
我将假设您的主题有许多作业,因为您的 Assignment
类中有一个 subject_id
。如果是这种情况,编写循环的最终且最正确的方法是:
old_subject.assignments.each do |assignment|
new_assignment = assignment.dup
new_assignment.subject_id = new_subject.id
new_assignment.save
end
关于ruby-on-rails-3 - 本地跳转错误 find_each 上没有给出 block (yield)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963519/