Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 未定义的方法'each';在Rails 3.2中_Ruby On Rails - Fatal编程技术网

Ruby on rails 未定义的方法'each';在Rails 3.2中

Ruby on rails 未定义的方法'each';在Rails 3.2中,ruby-on-rails,Ruby On Rails,我在rails控制台中尝试过相同的场景 但是为什么我会 对于# 在我的模型中,我有一个回调函数,它将立即更新表单 after_update :check_app_on_update? def check_app_on_update? self.each do |ppmp| ppmp_year = ppmp.year get_app = AnnualProcurementPlan.where(year: ppmp_year) get_

我在
rails控制台中尝试过相同的场景

但是为什么我会

对于
#

在我的模型中,我有一个回调函数,它将立即更新表单

after_update :check_app_on_update?

def check_app_on_update?

      self.each do |ppmp|
        ppmp_year = ppmp.year
        get_app = AnnualProcurementPlan.where(year: ppmp_year)
        get_id = get_app.map{|a| a.id }
        get_id.each do |app_id|
          update_attribute(:annual_procurement_plan_id, app_id)
        end
      end  
    end
但是继续得到未定义的方法“each”

但是每当我删除
self.each
循环时

我得到了
“堆栈级别太深”
类型的错误

任何变通办法都将受到赞赏

编辑

好吧,现在我意识到我应该坚持我的老方法。这是没有
每个

def check_app_on_update?
      ppmp_year = self.year
      get_app = AnnualProcurementPlan.where(year: ppmp_year)
      get_id = get_app.map{|a| a.id }

      get_id.each do |app_id|
        # ppmp = ProjectProcurementManagementPlan.last    
        #         ppmp.update_attribute(:annual_procurement_plan_id, app_id )
        @idd = app_id
      end
        update_attribute(:annual_procurement_plan_id, @idd )
  end
但是我得到的
堆栈级别太深了
错误

我从日志中看到,有一个无止境的循环

(0.5ms)  UPDATE "project_procurement_management_plans" SET "status" = 'Approved', "updated_at" = '2013-05-31 09:55:00.000000', "annual_procurement_plan_id" = 1 WHERE "project_procurement_management_plans"."id" = 19
  AnnualProcurementPlan Load (0.5ms)  SELECT "annual_procurement_plans".* FROM "annual_procurement_plans" WHERE "annual_procurement_plans"."year" = 2012
   (0.2ms)  ROLLBACK
Completed 500 Internal Server Error in 16737ms

SystemStackError - stack level too deep:
  (gem) actionpack-3.2.11/lib/action_dispatch/middleware/reloader.rb:70:in `'

因为
self
表示一个对象,没有
。每个
方法用于一个对象,
。每个
都用于收集。

因为
self
表示一个对象,没有
。每个
方法用于一个对象,
。每个
都用于收集。

我的猜测是:

堆栈级别太深
是因为
更新属性()
调用
检查应用程序是否更新?
再次调用
更新属性()
调用
检查应用程序是否更新?
再次

需要更多信息才能更加自信…

我的猜测是:

堆栈级别太深
是因为
更新属性()
调用
检查应用程序是否更新?
再次调用
更新属性()
调用
检查应用程序是否更新?
再次


需要更多信息才能更加自信……

您想准确检查什么?刚刚更新的对象?或其他记录?正在更新的对象,因此要循环遍历其属性?或者只是一个特定的?检查我的编辑。我编辑了我的剧本。谢谢。@SergeyBolgov有答案;)你到底想检查什么?刚刚更新的对象?或其他记录?正在更新的对象,因此要循环遍历其属性?或者只是一个特定的?检查我的编辑。我编辑了我的剧本。谢谢。@SergeyBolgov有答案;)谢谢,但是如果
堆栈级别太深
请将其作为一个单独的问题发布,有多个子问题的问题不太合适,通常标题不起作用或“两者都起作用”,等等。谢谢,但是
堆栈级别太深如何
请将其作为一个单独的问题发布,有多个子问题的问题不太合适,通常标题不起作用或“两者都起作用”,等等@xirukitepe尝试添加调试打印:一个在方法开头,一个在
update\u属性
调用之前。如果你看到一系列的指纹,那么我猜是真的。在这种情况下,您不应该从
check\u app\u on\u update?
调用
update\u attribute
,因为这会引入无限递归。@xirukitepe尝试添加调试打印:一个在方法开头,一个在
update\u attribute
调用之前。如果你看到一系列的指纹,那么我猜是真的。在这种情况下,您不应该从
check\u app\u on\u update?
调用
update\u属性,因为这会引入无限递归。