Hi --
Named changed to protect the innocent.
So I have
map.resources :stories do |story| story.resources :comments end
This lets me have /story/1/comments or /story/1/comment/3.
If I want to still have access to plain old /comments to give me all comments across all stories do I need to have:
map.resources :comments
map.resources :stories do |story| story.resources :comments end
Is this allowed ? Can I map the same resource into two different contexts ?
The thing is, when you call resources, you create methods called comments_url, comment_url, etc. So if you create those methods twice, the second set take precedence.
There are a couple of things you can do. One is [untested so tweak if I've mistyped it]:
map.resources :comments map.resources :stories do |story| story.resources :comments, :name_prefix => "inner_" end
Now you'll have:
comment_url(@comment) inner_comment_url(@story, @comment)
You can also add the :name_prefix to the plain comments resources, if you'd rather have it work that way.
Another thing you can do -- but be warned; it's very experimental, and also may or may not suit your schema -- is use my Inferred Routes plugin. This allows you to do just the nested route, and then when you do:
comment_url(@comment)
the plugin will infer:
comment_url(@comment.story, @comment)
You can get the plugin at: http://www.risleydale.net/svn/inferred_routes/tags/0.1.1
David