2017-08-17 59 views
0

我正在我的现有导轨应用程序上安装设计。 我在退出时遇到了一些问题。错误:[删除] URI模式,而sign_out

视图:

<%= 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] "https://stackoverflow.com/users/sign_out" 

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

更新:application.js中

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

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

+0

你可以发布你的'application.js'? – Pavan

+0

我加了application.js。 – Vladislav

+0

我想说的另一件事是这个应用程序是用angularJS构建的。 因此,jquery文件存储在vendor/assets/stylesheets/bower_components/jquery中。 我用下面的两个答案。但我仍然遇到以上错误。 – Vladislav

回答

0

您需要jquery-ujs为了利用<%= link_to ..., method: :delete %>发送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 %> 
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 .