Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 本地跳转错误每个查找单元上没有给定块(产量)错误_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 本地跳转错误每个查找单元上没有给定块(产量)错误

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

我正在尝试单步浏览使用find_检索的记录列表

我在这个答案的基础上设计了控制器代码,但仍然得到一个“无块给定(产量)”错误

我刚刚开始学习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_

我知道我需要向一个街区屈服,但我想不出在这个特殊的情况下会是什么样子


谢谢您的建议。

您正在将一个块传递给
其中的
,而没有块传递给
查找每个
。你不能那样做。您需要反转
查找每一个
其中
在这一行上,顺序很重要,因为块被传递到最后调用的方法:

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
的返回值。您的假设是正确的。谢谢你优雅的回答。