I'm new to Rails, and I'm trying to use the link_to helper to create a link that issues a PUT request instead of a GET request. Specifically, I'm trying to create a link that activates a user's account in my app from the admin's panel. I'm using Rails 3.0.5.
My routes.rb file has:
match '/admin/users/:id/activate' => 'admin#activate_user',
:action => :activate_user, :via => :put
My view has:
link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put
However this generates the URL (for example) /admin/users/7/activate?method=put
with the source code <a href="/admin/users/7/activate?method=put">Activate</a>
.
I'd like to generate, instead, <a href = "/admin/users/7/activate" data-method="put">Activate</a>
I realize I could use button_to, but I've been wrestling with this issue for a while and I'm confused why I'm seeing this behavior, when other tutorials say that what I'm doing should be valid. How can I go about creating a link_to helper with the behavior I want?
link_to
thinks that:method => :put
is part of the path hash. You have to tell it otherwise. Wrap your path in brackets.Now
link_to
will recognize:method => :put
as an option, not part of the link's path.As a side note, you should try to use route helpers instead of path hashes whenever possible. Keeps things nice and tidy, and avoids nit-picky situations like this.
Updated - The
link_to
helper will do a GET unless a method is specified.Its better specifying the exact request type, instead of
match
in your routes file. How about replacingmatch
byput
in routes as :The
activate_user
method should reside inadmins
controller. The docs has more info onlink_to
helper.