Ruby on rails 3 本地跳转错误每个查找单元上没有给定块(产量)错误
我正在尝试单步浏览使用find_检索的记录列表 我在这个答案的基础上设计了控制器代码,但仍然得到一个“无块给定(产量)”错误 我刚刚开始学习Ruby和Rails,还没有找到一个完整的解释(尽管有很多基本的例子)来解释我需要的块和产量 我的代码如下所示:Ruby on rails 3 本地跳转错误每个查找单元上没有给定块(产量)错误,ruby-on-rails-3,Ruby On Rails 3,我正在尝试单步浏览使用find_检索的记录列表 我在这个答案的基础上设计了控制器代码,但仍然得到一个“无块给定(产量)”错误 我刚刚开始学习Ruby和Rails,还没有找到一个完整的解释(尽管有很多基本的例子)来解释我需要的块和产量 我的代码如下所示: def select_save @class = params[:class] @student_id = params[:id] @class.each do |id| old_subject = Subje
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_
我知道我需要向一个街区屈服,但我想不出在这个特殊的情况下会是什么样子
谢谢您的建议。您正在将一个块传递给
其中的,而没有块传递给查找每个。你不能那样做。您需要反转查找每一个
和其中
在这一行上,顺序很重要,因为块被传递到最后调用的方法:
Assignment.find_each.where(:subject_id => id) do |assignments|
应改为:
Assignment.where(:subject_id => id).find_each do |assignments|
Assignment.where(:subject_id => id).find_each do |assignment|
new_assignment = assignment.dup
new_assignment.subject_id = new_subject.id
new_assignment.save
end
下一个问题是,您试图迭代作业
,这是一个单一作业find_每个
都已经在为您进行迭代,一次向块传递一个赋值。该块应为:
Assignment.where(:subject_id => id).find_each do |assignments|
Assignment.where(:subject_id => id).find_each do |assignment|
new_assignment = assignment.dup
new_assignment.subject_id = new_subject.id
new_assignment.save
end
我将假设你的科目有很多作业,因为你的作业
类中有一个科目id
。如果是这种情况,那么编写循环的最终也是最正确的方法是:
old_subject.assignments.each do |assignment|
new_assignment = assignment.dup
new_assignment.subject_id = new_subject.id
new_assignment.save
end
您忽略了新建主题.save
的返回值。您的假设是正确的。谢谢你优雅的回答。