我的應用中的註銷鏈接一直工作正常,然後它就停止工作。我有一段時間沒有測試過,但一個月後我還沒有對它做任何改變!當它被控制器解釋爲DELETE
請求時,它發送一個GET
請求。這裏是我的代碼:設計Rails 3.2:註銷鏈接停止工作
在我看來,我的ERB文件中包含這一行:
<li><%= link_to('Log Out', destroy_user_session_path, :method => :delete)%></li>
,也包括這樣的:
<%= javascript_include_tag "application" %>
這是從我application.js
:
//
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require jquery.serializeJSON
//= require jquery-ui-1.10.3.custom
//= require jquery-ui-touchpunch.min.js
//= require auto_form_bot
//= require_tree ../templates
//= require_tree ./models
//= require_tree ./collections
//= require_tree ./views
//= require_tree ./routers
//= require_tree .
這裏是我的gemfile中的相關內容:
source 'https://rubygems.org'
ruby "1.9.3"
gem 'rails', '3.2.13'
gem 'backbone-on-rails', '~> 1.1'
gem 'compass-rails'
gem 'devise', '>= 3.1.0'
gem 'ejs'
gem 'figaro'
gem 'jquery-rails'
gem 'pg'
gem 'sass-rails', '~> 3.2.3'
這是呈現實際的HTML:
<li><a href="https://stackoverflow.com/users/sign_out" data-method="delete" rel="nofollow">Log Out</a></li>
當我點擊的鏈接,這裏是我的錯誤:
Routing Error
No route matches [GET] "https://stackoverflow.com/users/sign_out"
這裏是我的服務器日誌:
Started GET "https://stackoverflow.com/users/sign_out" for 127.0.0.1 at 2013-12-19 23:49:24 -0500
ActionController::RoutingError (No route matches [GET] "https://stackoverflow.com/users/sign_out")
以下是相關路線:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
通過鏈接產生的GET
請求將會被自動更改爲DELETE
的要求,但它不是了,我不知道我的改變,使其停止工作。
即使陌生人,每隔一段時間它實際上工作!同樣的鏈接在我的應用程序的另一個頁面上工作。這裏是我的應用程序的演示帳戶的鏈接,在那裏你將自動登錄,所以你可以註銷:http://www.form-itable.com/accounts/demo
我找不到我在這裏失蹤。我知道我可以制定一個解決方法,但該鏈接應該能夠正常工作,直到現在,我想知道爲什麼它不是。
應該有'POST'請求不是'DELETE'或'GET',因爲有些瀏覽器不支持'DELETE'方法 – hawk
@hawk,你是對的,但是因爲它是一個鏈接,它只會'GET ',但由於'data-method =「delete」'部分,它應該自動更改爲'DELETE'。它在我的應用程序的其他地方工作 – RustyToms
Rails會將'method::delete'擴展爲像這樣的內容''那麼只有在這之後你的服務器纔會以'DELETE'請求威脅你的請求不是瀏覽器。 – hawk