0

我试过同样的场景rails console

但是为什么我会...

未定义each的方法#<ProjectProcurementManagementPlan:0x007ff9ecda2148>

在我的模型中,我有一个回调会立即更新表单

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

但不断获得undefined method 'each'

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

我得到'stack level too deep'错误类型。

任何解决方法将不胜感激。

编辑

好的,现在我意识到我应该坚持我的旧方法。那是没有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

但我收到stack level too deep错误

我从日志中看到,有一个无限循环。

(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 `'
4

2 回答 2

3

我的猜测是:

stack level too deep发生是因为再次调用该调用update_attribute()再次调用...check_app_on_update?update_attribute()check_app_on_update?

需要更多信息才能更有信心...

于 2013-05-31T01:53:06.303 回答
0

因为self意味着 1 个对象并且没有.each1 个对象的方法,.each所以用于集合。

于 2013-05-31T01:34:22.143 回答