Ruby on Rails link_to with put Method

我是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 

但是,这会生成URL(例如) https://stackoverflow.com/admin/users/7/activate?method=put ,源代码为Activate

相反,我想生成Activate

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

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

它更好地指定确切的请求类型,而不是match您的路由文件。 如何通过put路线替换match

 put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user' link_to 'Activate', activate_user_path(user.id), method: :put 

activate_user方法应驻留在admins控制器中。 docs有更多关于link_to帮助器的信息。

link_to认为:method => :put是路径哈希的一部分。 否则你必须告诉它。 用括号括起你的路径。

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

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

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