Chris Hanks
2009-Apr-18 18:11 UTC
RESTful Routing: Getting names of resources out of paths
Hello - I''m trying to remain RESTful in a new application that I''m building, but I''m not sure how to get the routes that I want. I''m trying to avoid having resource names like "posts" and "comments" cluttering things up. For example, for a resource that I designate: GET example.com -> index GET example.com/1 -> show, id=1 GET example.com/1/edit -> edit, id=1 GET example.com/new -> new Etc. In addition, I''d like to nest another resource beneath that (there''s a has_many relationship), so that I can get routes like: example.com/1/3 example.com/1/3/edit Etc. I''m planning on using friendly_id to change the IDs and make the URLs more memorable, but before I introduce that I just want to get those resource names out of there. I want to remain as restful as possible, but I''m not sure how to get this using map.resources. Ideas? Thanks, Chris -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Dmitry Sokurenko
2009-Apr-21 13:59 UTC
Re: RESTful Routing: Getting names of resources out of paths
Hi Chris, You can''t do it using Rails'' map.resources macro. You need to use the router directly, like this: map.posts '''', :controller => ''posts'', :action => ''index'', :conditions => {:method => :get} map.posts '''', :controller => ''posts'', :action => ''create'', :conditions => {:method => :post} map.new_post ''new'', :controller => ''posts'', :action => ''new'', :conditions => {:method => :get} map.post '':id'', :controller => ''posts'', :action => ''show'', :conditions => {:method => :get} map.post '':id'', :controller => ''posts'', :action => ''update'', :conditions => {:method => :put} map.post '':id'', :controller => ''posts'', :action => ''destroy'', :conditions => {:method => :delete} map.edit_post '':id/edit'', :controller => ''posts'', :action => ''edit'', :conditions => {:method => :get} map.resources :comments, :path_prefix => '':post_id'' it will work, but generally it''s not a very good idea to have such URLs, cause it won''t work very well if you will have lots of resources at some point. Maybe it will be better to use standard routes + 2 aliases, for index (/ — shows all posts) and for show (/123 - shows a specific post). Dmitry