错误:[delete] URI模式,而sign_out

时间:2017-08-17 16:23:27

标签: ruby-on-rails devise

我正在我现有的rails应用程序上安装设备。 我在退出时遇到了一些问题。

视图:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

路线:

new_user_session GET    /users/sign_in(.:format)       users/sessions#new
user_session POST   /users/sign_in(.:format)       users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy

如您所见,'sign_out'必须是[删除]。 但是,当我唱出我遇到的网站时,请遵循错误。

Routing Error: No route matches [GET] "/users/sign_out"

我不明白为什么[删除]更改为[GET]

更新:application.js

//= require angular
//= require angular-resource
//= require_tree .

更新: 我想说的另一件事是这个应用程序是使用angularJS构建的。 所以jquery文件存储在vendor / assets / stylesheets / bower_components / jquery中。 我使用了以下两个答案。但我仍然遇到了上述错误。

2 个答案:

答案 0 :(得分:0)

好像你的应用中没有安装jquery-rails。这就是DELETE请求被取代为GET的原因。试试下面的

gem 'jquery-rails'中加入Gemfile并运行bundle install。稍后添加

//= require jquery
//= require jquery_ujs

application.js

//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-resource
//= require_tree .

答案 1 :(得分:0)

您需要jquery-ujs才能使用delete发送<%= link_to ..., method: :delete %>个请求。

//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-resource
//= require_tree .

浏览器仅发送GET请求以响应单击的链接。所以jquery-ujs所做的是为具有data-method属性的元素添加一个事件处理程序,该属性创建一个表单并发送它。这将创建一个POST请求,其中包含Rack :: MethodOverride中间件选中的特殊_method参数,并将请求方法更改为DELETE

您还可以使用button_to创建实际表单,而不依赖于javascript:

<%= button_to "Sign out", destroy_user_session_path, method: :delete %>