On 12 Aug 2011, at 21:07, 7stud -- wrote:
> Why does this link:
>
> <h1>Pages#home</h1>
> <p>Find me in app/views/pages/home.html.erb</p>
>
> <%= link_to "Update clicks ", { :controller =>
''users'', :action =>
> ''update_clicks''} %>
>
>
> ...route me to the users/show page? Here are my routes:
>
>
> Test2App::Application.routes.draw do
> resources :users
> root :to => "pages#home"
>
> post ''users/update_clicks''
>
>
> I know I can get the link to go to ''pages/home'' as
intended by adding
> :method => post to the link, but I''m curious how the the
users/show page
> gets rendered? I would expect a ''get'' request to
''users/update_clicks''
> to produce a routing error.
The users#show route which "resources :users" creates is:
get ''/users/:id'', :controller =>
''users'', :action => ''show''
When you try to GET /users/update_clicks, it matches this route, with the
''id'' parameter equal to ''update_clicks''.
There is nothing too magical going on in the router; it matches URL segments in
a simple way. It doesn''t know that ''update_clicks'' is
unlikely to be a real ID. All it sees is a path with ''users''
in the first bit, and then *something* in the second bit, and as far as
it''s concerned that''s a match.
More importantly, it just uses the first matching route it can find, and ignores
anything else in your routes file. So in this case, it''s finding a
matching route in "resources :users", and so it''s essentially
ignoring your "post ''users/update_clicks''" route.
Chris
--
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.