【问题标题】:"NameError, uninitialized constant" error after modifying controller code修改控制器代码后出现“NameError, uninitialized constant”错误
【发布时间】:2013-08-17 17:33:03
【问题描述】:

我最近能够通过将所有内容分组到文件夹来组织我的代码。
我在app/ 目录下的控制器组和lib/ 目录下的模块使用相同的“组名”时遇到了问题,但我可以通过以下方式解决:

Rails: Same name for a library module and a group of controllers?

我也知道,每当您更改 lib 代码时,您都需要重新启动 rails 服务器,这对我来说完全没问题。

但是最近重新整理之后,每次修改controllers中的代码,都会报如下错误!!!

NameError at /admin
uninitialized constant Admin::PagerDuty

要解决它,我只需重新启动服务器!

有什么建议吗?!

编辑:结构:

控制器main_controller.rbapp/controllers/admin

class Admin::MainController < ApplicationController
end

助手main_helper.rbapp/helpers/admin

module Admin::MainHelper
      require "admin/pager_duty.rb"

      def pager_duty
        pagerduty = Admin::PagerDuty.new()
        @on_call = pagerduty.on_call()
        @counts = pagerduty.open_incidents()
      end
end

lib pager_duty.rblib/admin

module Admin 
  class PagerDuty
   ....
  end
end

【问题讨论】:

  • 那么您是否对 lib 类使用自动加载?还是没有自动加载的明确要求?
  • 明确,我将编辑问题以添加更多信息。
  • 您不必在开发模式下使用 Rails 默认设置重新启动服务器。要在 lib 目录下自动加载您的 ruby​​ 文件,请将以下内容添加到您的 config/application.rb 配置文件中:config.autoload_paths += %W(#{config.root}/lib)
  • 问题不在于更改lib代码后重新启动,而是在任何地方更改任何代码。

标签: ruby-on-rails


【解决方案1】:

尝试改变

require "admin/pager_duty.rb"

require_dependency "admin/pager_duty.rb"

在你的模块中。

【讨论】:

  • 这是 Rails 内部方法,常规 require 不会重新加载更改,因此 uninitialized constant 错误。
  • 我只是在重新组织我的文件后才遇到这个问题!还是谢谢
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 2015-05-07
相关资源
最近更新 更多