2017-08-17 55 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 .