簡體   English   中英

設計注銷不起作用

[英]Devise logout not working

我正在使用最新版本的devise和rails 4.2.4。 我有我的主頁

 public/index.html

其中包含大量的javascript。 但是,當我從其他頁面加載它時,並不會加載所有效果。 如此包含

 $(document).on('page:load', ready);
 <script src="/js/modernizr-2.6.2.min.js"></script>
 <script src="/js/main.js"></script>

在application.js文件中。 但是然后注銷

<%= link_to "Logout",destroy_user_session_path, method: :delete %>

不起作用! 它被渲染為GET / users / sign_out。

當我從application.js刪除這些鏈接時,它可以正常工作。

這個問題有解決方法嗎?

問題是大多數瀏覽器不支持DELETE方法,該請求實際上將以GET的方式提交,並帶有data-method="delete"屬性。 這取決於您的頁面正在加載“用於jQuery的不干擾腳本適配器”(jquery-ujs)。

如果您使用的是標准Rails模板,則“ application.js”清單文件將為您解決這個問題,但是鑒於您將index.html放在公共目錄中,因此您必須手動添加jqueryjquery-ujs標頭中的jquery-ujs

一種替代方法是將注銷路徑更改為實際使用GET(無論如何,您也會遇到PUT和PATCH方法的問題),並將其添加到您的devconfig配置中(來自devise wiki ):

# config/initializers/devise.rb
# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :get

如果您打算使用rails,則應該找出為什么視圖視圖模板的標准rails處理方式存在問題。 我使用了很多javascript繁重的頁面,它們工作得很好。 另外,您還可以獲得資產管道的所有好處。

您的javascript錯誤。

-

每次使用method: :deletemethod: :patch ,Rails都會使用Javascript正確設置一個帶有適當動詞的表單:

[link_to]動態創建HTML表單,並立即使用指定的HTTP動詞提交表單以進行處理。 在使鏈接執行諸如刪除記錄之類的危險動作(在搜尋您的站點的同時,搜索機器人可能會遵循的行為)中執行POST操作時非常有用。 支持的動詞是:post,:delete,:patch和:put。 請注意,如果用戶禁用了JavaScript,則該請求將退回到使用GET

如果您的JavaScript損壞(IE出現錯誤,導致其無法在頁面上正常運行),則上述內容是正確的。

-

由於您尚未發布JS,因此我無法提供任何詳細信息。

但是,我可以說您的JS應該盡可能不引人注目

在您的Rails應用程序中的任何地方使用<script>是不好的習慣; 您應該借助鏈輪清單清單指令將文件串聯在application.js

#app/assets/javascripts/application.js
//= require main
//= require modernizr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM