gpt4 book ai didi

ruby-on-rails-3 - 本地跳转错误 find_each 上没有给出 block (yield)错误

转载 作者:行者123 更新时间:2023-12-03 00:41:21 33 4
gpt4 key购买 nike

我正在尝试逐步浏览使用 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_eachwhere,顺序很重要,因为该 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com