Expected … to define Base

I new to rails. I have a setup in the lib directory like so:

lib/
   blog/
     core/
        search/
            base.rb

The base.rb defines the Base class as well:

module Blog
  module Core
    module Search
      class Base

        attr_accessor :properties

        def initialize(params)
          @properties = {}
        end
      end
    end
  end
end

I have the following code in my application.rb

config.autoload_paths += Dir["#{config.root}/lib/**/"]

When I include it in posts controller I get following errors:

LoadError in PostsController#index

Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base

Any idea? I’m using rails 3.2.5 with RVM. Thank you for every advice.

Added my full stack

Started GET "/admin/posts" for 127.0.0.1 at 2012-06-08 21:06:18 +0800

LoadError (Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base):
  app/controllers/admin/base_controller.rb:5:in `<top (required)>'
  app/controllers/admin/posts_controller.rb:6:in `<top (required)>'

  Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
  Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.6ms)
  Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (7.0ms)

Please help me.

This is kind of interesting. I want to spend some time tomorrow to debug this kind of issues (that happens very frequently), unless someone gets to it first.

Is it bug?

Try just adding lib/ to autoload_paths - the ** part is tripping it up, so it’s deciding that your file should define ‘Base’, not Blog::Core::Search::Base.

BTW, if you’re new to Rails you may want to try learning it more idiomatically before dumping a jumbo-sized bucket of OO overdesign on it with all these modules…

–Matt Jones