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