markhorrocks
markhorrocks

Reputation: 1538

Rails 4 uninitialized constant for module

In a new rails 4 app I anm getting an unintialized constant error for a module. The module is named ProcessBill and is located in lib/process_bill.rb

console error:

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

controller code:

class BillsController < ApplicationController

  include ProcessBill

lib/process_bill.rb

module ProcessBill

Upvotes: 46

Views: 35884

Answers (4)

Wouter Schoofs
Wouter Schoofs

Reputation: 986

This will also work in Rails 5 in your application.rb file:

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

Upvotes: 8

Peter Marklund
Peter Marklund

Reputation: 1033

I had this problem too with the lib directory with Rails 5 and it appeared in production but not in development. To fix it you need to add the lib directory to eager_load_paths. Here is the relevant part from my application.rb:

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

Upvotes: 44

sevenseacat
sevenseacat

Reputation: 25049

Have you added lib to your autoload path? This was necessary in Rails 3, I'm not sure if it's still required for Rails 4.

Try adding this into the class definition in config/application.rb -

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

Upvotes: 78

Alyssa Ross
Alyssa Ross

Reputation: 2169

Try adding this line to the top of your controller:

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

Upvotes: 5

Related Questions