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

标签 ruby-on-rails-3

我正在尝试逐步浏览使用 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/

相关文章:

javascript - Rails Ajax 在保留参数的同时刷新部分内容

ruby-on-rails-3 - 为什么 Rails Controller 操作方法需要参数

ruby-on-rails - 使用 postgres.app 使用现有的 Rails 应用程序迁移到 postgresql

ruby-on-rails-3 - 如何在 Rails 3 中获取主机名?

jquery - 提交 Rails Jquery Modal 表单且验证不起作用

javascript - 按 Enter 键进行搜索

ruby-on-rails - Rails 缓存的默认到期时间是多少?

ruby-on-rails - 如何通过覆盖诸如 respond_with 之类的方法来干掉 Rails 3 Controller ?

ruby-on-rails-3 - Rails i18n如何获取某个键的所有值?

ruby-on-rails-3 - Multi-Tenancy (acts_as_tenant) 与 Devise(用户默认范围由子域限定)中断 session