Forum: Ruby on Rails Models and controllers organized under module with same name

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
micand7 (Guest)
on 2005-11-25 06:12
(Received via mailing list)
Howdy,

I would like to group related controllers within a
module, and have related models under a module of the
same name. I start off with the model:

micand@coconut ~/dev/projects/tmp $ script/generate
model Container::Model
      create  app/models/container
      create  test/unit/container
      create  test/fixtures/container
      create  app/models/container/model.rb
      create  test/unit/container/model_test.rb
      create  test/fixtures/container/models.yml


Seems easy enough, but all does not work as it should.

micand@coconut ~/dev/projects/tmp $ script/console
Loading development environment.
>> Container::Model
NameError: uninitialized constant Container
        from
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:200:in
`const_missing'
        from (irb):1


To fix this, I create app/models/container.rb with the
following contents:

module Container end
require_dependency File.join(File.dirname(__FILE__),
'container', 'model')


Sweet success!

micand@coconut ~/dev/projects/tmp $ script/console
Loading development environment.
>> Container::Model
=> Container::Model


The problem comes after I add the controller. Creation
works fine:

micand@coconut ~/dev/projects/tmp $ script/generate
controller Container::
Controller
      create  app/controllers/container
      create  app/helpers/container
      create  app/views/container/controller
      create  test/functional/container
      create
app/controllers/container/controller_controller.rb
      create
test/functional/container/controller_controller_test.rb
      create
app/helpers/container/controller_helper.rb


But it is no longer possible to refer to the model
class.

micand@coconut ~/dev/projects/tmp $ script/console
Loading development environment.
>> Container::Model
NameError: uninitialized constant Model
        from
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:195:in
`const_missing'
        from
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:72:in
`const_missing'
        from (irb):2


It seems having a controller module with the same name
as a model module somehow defeats Rails' automatic
require()'ing of needed model files. Adding "require
File.join(RAILS_ROOT, 'app', 'models', 'container')"
to environment.rb doesn't resolve this issue, as the
forced inclusion of the model module forces out the
controller module:

micand@coconut ~/dev/projects/tmp $ script/console
Loading development environment.
>> Container::Model
=> Container::Model
>> Container::ControllerController
NameError: uninitialized constant ControllerController
        from
/usr/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:200:in
`const_missing'
        from (irb):2


Is there any way to have models and controllers
co-exist within a module of a particular name, or is
the only option to give different names to the module
housing the controllers and the module housing the
models?

Thanks,

Jeff





__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
This topic is locked and can not be replied to.