2016-01-13 98 views
0

我使用最新版本的設計和導軌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> 

in application.js文件。 但隨後 註銷

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

不起作用!它被呈現爲GET/users/sign_out。

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

針對此問題的任何解決方法?

+0

的問題:如果你使用的軌道,爲什麼你在公衆,而不是某種類型的軌道模板主頁? –

+0

@TarynEast那麼,我試圖包括應用程序內,但一些影響失蹤。 –

+0

是的,但你不應該以這種方式包含它 - 如果你正在做一個標準的rails應用程序應該是一個erb模板。 –

回答

0

您的JavaScript腳本有錯誤。

-

每次使用method: :deletemethod: :patch時間,Rails的填充用適當的動詞形式,using Javascript正確設置:

[的link_to]動態創建一個HTML表單,並立即提交使用指定的HTTP動詞進行處理的形式。用於鏈接執行POST操作,用於像刪除記錄這樣的危險操作(搜索漫遊器在抓取您的站點時可以跟蹤)。支持的動詞是:post,:delete,:patch和put。 請注意,如果用戶禁用JavaScript,請求將回落到使用GET

以上,如果你的JavaScript被打破是真(即你有錯誤,導致它從頁面上正常工作)。

-

因爲我們還沒有發佈你的JS,我不能給你任何細節。

但是,我可以說你的JS應該是unobtrusive越好越好。

在您的Rails應用程序的任何地方使用<script>是不好的做法;你應該在你的application.js串聯起來的sprockets manifest directives幫助文件:

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

問題是大多數瀏覽器不支持DELETE方法,請求實際上會以GET方式提交,並且具有data-method="delete"屬性。這依賴於您的頁面加載的「不顯眼的腳本適配器jQuery」(jquery-ujs)。

如果您使用的是標準rails模板,'application.js'清單文件會爲您處理這個問題,但是假設您將index.html放在公共目錄中,則必須手動包含這兩個文件jqueryjquery-ujs在您的標題。

另一種方法是改變路線註銷實際使用GET(你無論如何都會有與PUT和PATCH方法以及問題),添加以下內容到色器件的配置(從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重頁,並且它們工作得很好。另外,您還可以獲得資產管道的所有好處。

+0

我知道掛在devise.rb中,但我不想與GET方法相處。謝謝! –

+0

我認爲,如果您使用'GET'註銷,那麼瀏覽器預取和將註銷URL嵌入''標籤中的用戶可能會意外註銷用戶。 – Josh