Forum: Ruby on Rails Nested Controllers/Models/Views

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.
Raymond O. (Guest)
on 2007-04-12 01:17
I'm working on a project that is getting fairly large and I want to nest
the controller, model and view files so they each have parent
directories.  I do not want the nesting to affect any of the routing or
any of the functionality, it is purely a organizational thing.

(
  I want my files organized like this:

  app/controllers/parent_a/a_controller
  app/controllers/parent_b/another_controller

  app/models/parent_a/a_model
  app/models/parent_b/another_model
)

I've read many conflicting things about doing this, and am confused.
Some people say that you can simply move the files and it will just work
because the different resources will still remain in the same namespace
even if they are in different folders.  I've tried this, though, and
references to models are broken.

Is there a better way to do this?  Is there something I'm not doing that
is breaking my references?

Cheers, Ray!
Jeff C. (Guest)
on 2007-04-12 04:06
(Received via mailing list)
On Apr 11, 4:17 pm, Raymond O'Connor <rails-mailing-l...@andreas-
s.net> wrote:
> I'm working on a project that is getting fairly large and I want to nest
> the controller, model and view files so they each have parent
> directories.  I do not want the nesting to affect any of the routing or
> any of the functionality, it is purely a organizational thing.

I've had pretty good luck with this.  Here's what I've done:

1. For models that are in subfolders, I make sure that the model is in
a namespace that can be equivocated to a folder by the Inflector.  For
example, /app/models/extra/product.rb would look like this:

module Util

  class Product < ActiveRecord::Base
  end

end

or you could do

class Util::Product < ActiveRecord::Base

instead.

For controllers, do the same thing - make sure the fully qualified
name will match the folder heirarchy.

There's one big gotcha, though - your routing will need to specify the
full path to the controller, for example

map.connect '/products/:action/:id', :controller => 'subfolder/
products'

Then everything should work.

Jeff
This topic is locked and can not be replied to.