44

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

控制台错误:

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

控制器代码:

class BillsController < ApplicationController

  include ProcessBill

lib/process_bill.rb

module ProcessBill
4

4 回答 4

78

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

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

    config.autoload_paths += %W(#{config.root}/lib)
于 2013-06-09T08:48:10.960 回答
43

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

config.autoload_paths << "#{Rails.root}/lib"
config.eager_load_paths << "#{Rails.root}/lib"
于 2016-05-11T05:15:31.537 回答
8

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

    config.autoload_paths << Rails.root.join('lib')
    config.autoload_paths << Rails.root.join('lib/notifier')
于 2017-05-11T23:54:49.033 回答
5

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

require "#{Rails.root}/lib/process_bill.rb"
于 2013-06-09T08:44:48.963 回答