Ruby on Rails link_to with put Method

时间:2012-02-16 04:54:26

标签: ruby-on-rails link-to

我是Rails的新手,我正在尝试使用link_to帮助程序创建一个发出PUT请求而不是GET请求的链接。具体来说,我正在尝试创建一个链接,从管理员面板激活我的应用程序中的用户帐户。我正在使用Rails 3.0.5。

我的routes.rb文件有:

match '/admin/users/:id/activate' => 'admin#activate_user',
  :action => :activate_user, :via => :put

我的观点有:

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

然而,这会生成包含源代码/admin/users/7/activate?method=put的网址(例如)<a href="/admin/users/7/activate?method=put">Activate</a>

我想生成<a href = "/admin/users/7/activate" data-method="put">Activate</a>

我意识到我可以使用button_to,但我一直在努力解决这个问题,我很困惑为什么我看到这种行为,当其他教程说我正在做的事情应该是有效的。如何创建一个具有我想要的行为的link_to帮助器?

3 个答案:

答案 0 :(得分:33)

已更新 - 除非指定了方法,否则link_to帮助程序将执行GET。

更好地指定确切的请求类型,而不是路由文件中的match。如何在路由中将match替换为put

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

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

activate_user方法应驻留在admins控制器中。 docslink_to帮助商上有更多信息。

答案 1 :(得分:32)

link_to认为:method => :put是路径哈希的一部分。你必须另外说出来。用括号包裹您的路径。

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

现在link_to会将:method => :put识别为选项,而不是链接路径的一部分。

作为旁注,您应尽可能尝试使用路径助手而不是路径哈希。让事情变得干净整洁,避免这种挑剔的情况。

答案 2 :(得分:0)

如果您使用的是 link_to do 那么您可以使用以下语法

<%= link_to admin_subscription_path(user), method: :put do %>
 # can put html & css here
<% end %>