【问题标题】:Rails 4 uninitialized constant for moduleRails 4模块的未初始化常量
【发布时间】:2013-06-09 08:06:47
【问题描述】:

在一个新的 rails 4 应用程序中,我收到一个模块的未初始化常量错误。该模块名为 ProcessBill,位于 lib/process_bill.rb

控制台错误:

ActionController::RoutingError (uninitialized constant BillsController::ProcessBill):

控制器代码:

class BillsController < ApplicationController

  include ProcessBill

lib/process_bill.rb

module ProcessBill

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您是否已将 lib 添加到您的自动加载路径中?这在 Rails 3 中是必需的,我不确定 Rails 4 是否仍然需要它。

    尝试将其添加到 config/application.rb 中的类定义中 -

        config.autoload_paths += %W(#{config.root}/lib)
    

    【讨论】:

      【解决方案2】:

      我在使用 Rails 5 的 lib 目录时也遇到了这个问题,它出现在生产中,但没有出现在开发中。要修复它,您需要将 lib 目录添加到 eager_load_paths。这是我的 application.rb 中的相关部分:

      config.autoload_paths << "#{Rails.root}/lib"
      config.eager_load_paths << "#{Rails.root}/lib"
      

      【讨论】:

      【解决方案3】:

      这也适用于 Rails 5 中的 application.rb 文件:

          config.autoload_paths << Rails.root.join('lib')
          config.autoload_paths << Rails.root.join('lib/notifier')
      

      【讨论】:

        【解决方案4】:

        尝试将此行添加到控制器的顶部:

        require "#{Rails.root}/lib/process_bill.rb"
        

        【讨论】:

        • 您也可以只执行“require 'process_bill',因为lib 目录已经在加载路径上。
        • 小心,这会杀死自动重新加载!
        • 我需要做-“需要'process_bill.rb'”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多