Hi –
On Mon, 27 Nov 2006, Alan F. wrote:
This lets me have /story/1/comments or /story/1/comment/3.
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
–
David A. Black | [email protected]
Author of “Ruby for Rails” [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB’s Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1] Ruby for Rails | [3] http://www.rubypowerandlight.com
[2] http://dablog.rubypal.com | [4] http://www.rubycentral.org