Autoload Path and Nest
I have tow files hoge.rb and baz.rb.
app/models/hoge.rb
class Hoge class Fuga Baz.new end end
app/models/hoge/baz.rb
class Baz end
I have added the custom models to load path as follows.
config/environment.rb
config.autoload_paths += %W( #{RAILS_ROOT}/app/models/hoge )
Hoge::Fuga.new is LoadError: Expected in development mode as follows.
% script/console Loading development environment (Rails 2.3.11) >> Hoge::Fuga.new LoadError: Expected /home/admin/apps/ad_counter/hoge/app/models/hoge/baz.rb to define Hoge::Baz from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:452:in `load_missing_constant' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:122:in `const_missing' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:463:in `load_missing_constant' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:122:in `const_missing' from /home/admin/apps/ad_counter/hoge/app/models/hoge.rb:3 from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:406:in `load_without_new_constant_marking' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:406:in `load_file' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:547:in `new_constants_in' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:405:in `load_file' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:285:in `require_or_load' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:451:in `load_missing_constant' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:106:in `const_missing' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:118:in `const_missing' from (irb):1
Next is production mode as follows.
% script/console production Loading production environment (Rails 2.3.11) /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:452:in `load_missing_constant': Expected /home/admin/apps/ad_counter/hoge/app/models/hoge/baz.rb to define Hoge::Baz (LoadError) from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:122:in `const_missing' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:463:in `load_missing_constant' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:122:in `const_missing' from /home/admin/apps/ad_counter/hoge/app/models/hoge.rb:3 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:184:in `require' from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:291:in `require_or_load' ... 18 levels... from /usr/local/lib/ruby/1.8/irb/init.rb:250:in `load_modules' from /usr/local/lib/ruby/1.8/irb/init.rb:21:in `setup' from /usr/local/lib/ruby/1.8/irb.rb:54:in `start' from /usr/local/bin/irb:13
raise is activesupport-2.3.11/lib/active_support/dependencies.rb L 452
452 raise LoadError, "Expected #{file_path} to define #{qualified_name}" unless uninherited_const_defined?(from_mod, const_name)
It's OK when baz.rb file in app/models derectory.
% script/console Loading development environment (Rails 2.3.11) >> Hoge::Fuga.new => #<Hoge::Fuga:0xb7686ed0>