This doesn't look like a rails issue. It looks like ruby expected behaviour, unless I misunderstand.
The constant ModuleSpecificModel doesn't exist. Only SomeModule::ModuleSpecificModel exists. Ruby auto loading or rails autoloading would not expect this code to 'install' the ModuleSpecificModule at the top level ( I.e ::ModuleSpecificModel ) Sent from my iPad On 13 Sep 2012, at 18:04, Gary Weaver <[email protected]> wrote: I'm sure this is some basic misunderstanding I have to how dependency resolution should work in Rails, but am experiencing some wierdness with modules and models. I hadn't been using modules for models much because I had run into early issues with them, but woke up early this morning with the idea of a way to use them for something that we need. This was in a brand new Rails 4.0 beta project (using github rails/rails master), but have the same behavior in Rails 3.2.6. Here are the models. I just wanted to try to have the class load so I could see which class was being loaded, but just referencing these model classes causes issues: app/models/associated_model.rb class AssociatedModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end app/models/my_model.rb class MyModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end app/models/root_only_model.rb class RootOnlyModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end app/models/some_module/associated_model.rb class SomeModule::AssociatedModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" #bug puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end app/models/some_module/module_specific_model.rb module SomeModule class ModuleSpecificModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end end app/models/some_module/my_model.rb class SomeModule::MyModel < ActiveRecord::Base puts "in #{self.name}, AssociatedModel is #{AssociatedModel.name}" puts "in #{self.name}, ModuleSpecificModel is #{ModuleSpecificModel.name}" puts "in #{self.name}, MyModel is #{MyModel.name}" puts "in #{self.name}, RootOnlyModel is #{RootOnlyModel.name}" end And here is what happens in rails console: $ rails c Loading development environment (Rails 4.0.0.beta) 1.9.3p194 :001 > AssociatedModel in AssociatedModel, AssociatedModel is AssociatedModel NameError: uninitialized constant AssociatedModel::ModuleSpecificModel from /path/to/new_rails_app/app/models/associated_model.rb:3:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/associated_model.rb:1:in `<top (required)>' from (irb):1 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 1.9.3p194 :002 > MyModel in AssociatedModel, AssociatedModel is AssociatedModel NameError: uninitialized constant AssociatedModel::ModuleSpecificModel from /path/to/new_rails_app/app/models/associated_model.rb:3:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/associated_model.rb:1:in `<top (required)>' from /path/to/new_rails_app/app/models/my_model.rb:2:in `<class:MyModel>' from /path/to/new_rails_app/app/models/my_model.rb:1:in `<top (required)>' from (irb):2 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 1.9.3p194 :003 > RootOnlyModel in AssociatedModel, AssociatedModel is AssociatedModel NameError: uninitialized constant AssociatedModel::ModuleSpecificModel from /path/to/new_rails_app/app/models/associated_model.rb:3:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/associated_model.rb:1:in `<top (required)>' from /path/to/new_rails_app/app/models/root_only_model.rb:2:in `<class:RootOnlyModel>' from /path/to/new_rails_app/app/models/root_only_model.rb:1:in `<top (required)>' from (irb):3 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 1.9.3p194 :004 > SomeModule::AssociatedModel NameError: uninitialized constant SomeModule::AssociatedModel::AssociatedModel from /path/to/new_rails_app/app/models/some_module/associated_model.rb:2:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/some_module/associated_model.rb:1:in `<top (required)>' from (irb):4 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 1.9.3p194 :005 > SomeModule::ModuleSpecificModel NameError: uninitialized constant SomeModule::AssociatedModel::AssociatedModel from /path/to/new_rails_app/app/models/some_module/associated_model.rb:2:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/some_module/associated_model.rb:1:in `<top (required)>' from /path/to/new_rails_app/app/models/some_module/module_specific_model.rb:3:in `<class:ModuleSpecificModel>' from /path/to/new_rails_app/app/models/some_module/module_specific_model.rb:2:in `<module:SomeModule>' from /path/to/new_rails_app/app/models/some_module/module_specific_model.rb:1:in `<top (required)>' from (irb):5 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' 1.9.3p194 :006 > SomeModule::MyModel NameError: uninitialized constant SomeModule::AssociatedModel::AssociatedModel from /path/to/new_rails_app/app/models/some_module/associated_model.rb:2:in `<class:AssociatedModel>' from /path/to/new_rails_app/app/models/some_module/associated_model.rb:1:in `<top (required)>' from /path/to/new_rails_app/app/models/some_module/my_model.rb:2:in `<class:MyModel>' from /path/to/new_rails_app/app/models/some_module/my_model.rb:1:in `<top (required)>' from (irb):6 from /path/to/github/rails/railties/lib/rails/commands/console.rb:78:in `start' from /path/to/github/rails/railties/lib/rails/commands/console.rb:9:in `start' from /path/to/github/rails/railties/lib/rails/commands.rb:47:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>' Thanks in advance, Gary -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-core/-/erh_BfrAOvgJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
