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属性,因为这会引入无限递归。