Routing with namespaces using edge rails

Hi,

I was wondering if anyone came across a similar scenario when working
with namespaced routes with edge rails.

Consider an application with controllers customers and products that
also have other resources.

map.resources :customers do |customer|
customer.resources :notes
customer.resources :tags
end

map.resources :products do |product|
customer.resources :notes
customer.resources :tags
end

Now of course this poses a problem as it stands because the notes and
tags controllers will conflict. I know there are polymorphic routes/
controllers (http://revolutiononrails.blogspot.com/2007/05/drying-up-
polymorphic-controllers.html) however this doesnt make sense if the
controllers have little shared logic/behaviour; only a common name. I
know I can just use a different name, but with the addition of
namespaces this should no longer be a concern with a proper design.

So… I’m thinking something like:

/app/controllers/customers/root_controller.rb
/app/controllers/customers/tags_controller.rb
/app/controllers/customers/notes_controller.rb
/app/controllers/products/root_controller.rb
/app/controllers/products/tags_controller.rb
/app/controllers/products/notes_controller.rb

with routes like:

map.namespace(:customers) do |customers|
customers.resources :root, :has_many => [:tags, :notes]
end
map.namespace(:products) do |products|
products.resources :root, :has_many => [:tags, :notes]
end

creating routes like:
/customers/root/#{root_id}
/customers/root/#{root_id}/tags/#{id}
/customers/root/#{root_id}/notes/#{id
/products/root/#{root_id}
/products/root/#{root_id}/tags/#{id}
/products/root/#{root_id}/notes/#{id

This will work. But we have an unnecessary /root/ in the route. I
suppose the solution would be adding a flag to the namespace function
to pass a root controller with a default name of “root_controller” so
the root of the namespace can itself be a resource. Can this be done?
What do you guys think about it as an addition to rails?

This leads me to another scenario. Namespaced models… quite simply
as it stands you can in /app/models/ make a folder called /customer/
there add tag.rb and note.rb. With models Customer::Tag and
Customer::Note. One thing is the table_name will remain “tags” and
“notes”, which in this case should be prefixed by the namespace name
like “customer_tags” and “customer_notes”. Also with the ability to
have a root model like Customer in /customer/root.rb.

I’d love to hear that this can already be done as rails stands. I can
make the patches and submit them, however I don’t want to divulge from
other design considerations.

Regards,

Peter