Ruby on Rails link_to With put Method

久未见 提交于 2019-12-06 18:23:17

问题


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?


回答1:


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 replacing match by put in routes as :

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user'

link_to 'Activate', activate_user_path(user.id), method: :put

The activate_user method should reside in admins controller. The docs has more info on link_to helper.




回答2:


link_to thinks that :method => :put is part of the path hash. You have to tell it otherwise. Wrap your path in brackets.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put

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.



来源:https://stackoverflow.com/questions/9305753/ruby-on-rails-link-to-with-put-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!