Ruby on Rails link_to with put Method

mak*_*sim 23 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
Run Code Online (Sandbox Code Playgroud)

我的观点是:

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put
Run Code Online (Sandbox Code Playgroud)

但是,这会生成/admin/users/7/activate?method=put带有源代码的URL(例如)<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帮助器?

pra*_*vin 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
Run Code Online (Sandbox Code Playgroud)

activate_user方法应驻留在admins控制器中.该文档有更多信息link_to的帮手.

  • 这对我不起作用.如果link_to中没有定义任何方法,则会得到No route匹配[GET]错误消息. (4认同)
  • 没有`:method =>:put`就行不通.不应该被接受. (4认同)
  • 它仅在您更改路线时有效.请低估前仔细查看答案. (2认同)

Sub*_*ial 32

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

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put
Run Code Online (Sandbox Code Playgroud)

现在link_to将认识:method => :put到一个选项,而不是链接路径的一部分.

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