I have a set of nested resources as follows: map.resources :users map.resources :users, :has_many => :contacts this gives me a std route as follows to list a user''s contacts in the ContactsController ''index'' action: /users/<user id>/contacts A User has a ''username'' and what I''d like to do is have the route/url look like: /<username>/contacts Does anyone know how to do this? I''ve tried using map.connect, but that doesnt seem to work.
btw - I also tried map.resources :users, :path_prefix => "/:username" but that still leaves the url as: /users/<username>/contacts I''m trying to get rid of the ''/users'' in the front. On Aug 10, 5:31 pm, lunaclaire <szager...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have a set of nested resources as follows: > > map.resources :users > map.resources :users, :has_many => :contacts > > this gives me a std route as follows to list a user''s contacts in the > ContactsController ''index'' action: > > /users/<user id>/contacts > > A User has a ''username'' and what I''d like to do is have the route/url > look like: > > /<username>/contacts > > Does anyone know how to do this? I''ve tried using map.connect, but > that doesnt seem to work.
Hi, On Mon, 2009-08-10 at 17:46 -0700, lunaclaire wrote:> I''m trying to get rid of the ''/users'' in the front.I believe you need to consider using named routes. HTH, Bill
If you want the route to be www.mysite.com/bill-walton you will have to create a catch-all and ofcourse that needs to go at the bottom of your routes... Something like so: map.username '':username'', :controller => ''users'', :action => ''show'' But now you will have to do a good amount of security in the users controller. All hackers will hit that controller if it does not match any other routes.. I guess you could add a regular expression but that means your usernames would have to follow something that can be regexed...
thx... I had tried named routes, but something must not have been right... now I got it working as follows: map.contacts ''/:username/contacts'', :controller => ''contacts'', :action => ''index'' this gives me what I wanted. if I use: contacts_url(@user.username): I get: /<username>/contacts That works for that one restful route, but I had hoped to be able to do something with the nested resource declaration and have this apply for all the routes... for instance I still have urls that look like this: /users/<user id>/contacts/<contact id> when I''d like to see: /<username>/contacts/<contact id> anybody know how to get this form for all the generated restful routes? On Aug 10, 5:56 pm, bill walton <bwalton...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi, > > On Mon, 2009-08-10 at 17:46 -0700, lunaclaire wrote: > > I''m trying to get rid of the ''/users'' in the front. > > I believe you need to consider using named routes. > > HTH, > Bill