2015-10-14 63 views
1

我創建了一個簡單的rails應用並在其上實現了設計,我添加了登錄/註冊功能,並且工作正常。但是,當我添加了「退出」的功能,它給了我一個Routing ErrorNo route matches [GET] "/ideas/sign_out"Rails - 在設計中銷燬會話路徑時發生路由錯誤

下面是我實現的:

<% unless idea_signed_in? %> 
    <li><a href="#">Explore</a></li> 
    <li><%= link_to "Sign in", new_idea_session_path %></li> 
    <li><%= link_to "Share an idea", new_idea_registration_path %></li> 
<% else %> 
    <li><a href="#">Dashboard</a></li> 
    <li><a href="#">Explore</a></li> 
    <li><%= link_to "Sign Out", destroy_idea_session_path, method: :delete %></li> 
<% end %> 

:method => :delete,但仍然沒有連試了一下。我ran rake路線和我的路線是有效的:

destroy_idea_session_path DELETE /ideas/sign_out(.:format) devise/sessions#destroy

我加<%= javascript_include_tag :defaults %>我application.html.erb但仍沒有運氣。

我的routes.rb

Rails.application.routes.draw do 

    devise_for :ideas 
    root 'welcome#index' 

end 

回答

1

嘗試改變devise_for :ideasdevise_for :ideas, sign_out_via [:delete]

看來你的控制器發送GET請求,而不是刪除請求。確保你在任何你用來測試的設備上都啓用了Javascript - 如果JS沒有啓用,請求將回退到GET。

編輯:確保你找出你的鏈接正在發送什麼請求。

如果一切都失敗了,去你設計的配置文件,並更改線路 config.sign_out_via = :deleteconfig.sign_out_via = :get,並從你的路由文件中刪除, sign_out_via [:delete]

2

你已經知道的問題 -

沒有路由匹配[GET] "/ideas/sign_out"

這意味着你要連結使用:get方法logout鏈接。

這樣做的主要原因是忘記將method: :delete開關置於您的link_to參考中。爲了確保這不是問題,你可以使用以下命令:

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

JQuery的

如果您的鏈接是這樣的,它似乎是落實,下一個潛在的問題是你沒有jquery加載在你的意見。

Rails delete method it doesn't work

delete動詞actually isn't supported by most browsers,正因爲如此,Rails使用jQuery來修改HTML到delete開關通過作爲鏈路的屬性data的一部分。

名義上,你需要確保你的JQuery在你的意見加載&佈局:

#app/views/layouts/application.html.erb 
<%= javascript_include_tag "application" %> 

#app/assets/javascripts/application.js.erb 
//= require jquery 
//= require jquery_ujs 
//= require turbolinks 
//= require_tree . 

這將確保jQuery是加載,應用程序可以處理DELETE方法。

相關問題