Nest RESTful routes with namespaces?

Hi all

I have the following website structure:

In the namespace “music” I have artists, styles and labels, where
artists also acts as namespace containing types:

map.namespace :music do |music|
music.resources :artists
music.namespace :artists do |artists|
artists.resources :types
end
music.resources :styles
music.resources :labels
end

So I’d expect the following URL structure:

music/artists
music/artists/types
music/styles
music/labels

Everything works great, except when opening music/artists/types I get
the exception

NoMethodError in Music/artists/types#show

Showing music/artists/types/show.html.erb where line #2 raised:

undefined method `edit_music_artists_types_path’ for
#ActionView::Base:0x24207a0

Extracted source (around line #2):

1:
2: <%= link_to ‘Edit’,
edit_music_artists_types_path(@music_artist_types) %> |
3: <%= link_to ‘Back’, music_artists_types_path %>

Anyone sees the problem…? Isn’t it possible to use :artists als
namespace?

Thanks a lot,
Josh

the edit action requires a singular methof

edit_music_artists_type_path(id)

you’re using the plural.
most likely that’s it. otherwise it’s more likely, that types or type is
a ruby keyword than artists.

oops, just realize, you’re using a namespace, that’s the same name as a
controller, that most likely won’t work…

On Fri, Mar 21, 2008 at 12:28 AM, Joshua M.
[email protected] wrote:

map.namespace :music do |music|
music.resources :artists
music.namespace :artists do |artists|
artists.resources :types
end
music.resources :styles
music.resources :labels
end

http://api.rubyonrails.org/classes/ActionController/Routing/RouteSet/Mapper.html

Sniffer from the docs:
{{{
namespace(name, options = {}, &block)

Enables the use of resources in a module by setting the name_prefix,
path_prefix, and namespace for the model. Example:

map.namespace(:admin) do |admin|
admin.resources :products,
:has_many => [ :tags, :images, :variants ]
end

This will create admin_products_url pointing to “admin/products”,
which will look for an Admin::ProductsController. It’ll also create
admin_product_tags_url pointing to
“admin/products/#{product_id}/tags”, which will look for
Admin::TagsController.
}}}


Regards,
Josh.Yin/e$B]V3$L@e(B/A.K.A epaulin

Thorsten M. wrote:

the edit action requires a singular methof

edit_music_artists_type_path(id)

you’re using the plural.
most likely that’s it. otherwise it’s more likely, that types or type is
a ruby keyword than artists.

oops, just realize, you’re using a namespace, that’s the same name as a
controller, that most likely won’t work…

Surprisingly this really was the problem. I changed it to the singular
form, and now it works perfectly. So it seems not to be any problem to
nest namespaces and resources. :slight_smile:

Thanks you guys!