沒有路線匹配「 / users / sign_out」設計導軌3

我已經在個人應用程序上安裝了devise,並在個人application.html.erb文件中應用瞭如下內容: javascript

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

我跑了rake routes並確認全部路線均有效。 html

另外,在個人routes.rb文件中,我有devise_for :usersroot :to => "home#index"java

單擊「註銷」連接時,出現如下路由錯誤: jquery

No route matches "/users/sign_out"

任何想法致使錯誤的緣由是什麼? session


#1樓

在「 devise_for:users」以前查看您的routes.rb是否具備「 resource:users」,而後嘗試交換它們: app

  1. 做品 ui

    • devise_for:用戶
    • 資源:用戶
  2. 失敗 spa

    • 資源:用戶
    • devise_for:用戶

#2樓

在您的route.rb中: code

devise_for :users do
    get '/sign_out' => 'devise/sessions#destroy'
    get '/log_in' => 'devise/sessions#new'
    get '/log_out' => 'devise/sessions#destroy'
    get '/sign_up' => 'devise/registrations#new'
    get '/edit_profile' => 'devise/registrations#edit'
 end

並在您的application.html.erb中: htm

<%if user_signed_in?%>
          <li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>

#3樓

要使註銷連接成爲DELETE RESTful調用的功能,須要使用rails code = link_to('Logout', destroy_user_session_path, :method => :delete)來實現html屬性data-method = "delete"

可是,若是您未安裝gem jquery-ujs或未經過= javascript_include_tag "application"在application.html中調用生成的javascript,則響應將做爲GET請求發送,而且路由將失敗。

若是您不想使用jquery-ujs或沒法找到使其工做的方法,則有幾種選擇:

  1. devise.rb config.sign_out_via更改成equal :get (不建議這樣作,由於DELETE是適當的RESTful查詢)
  2. 或將link_to更改成= button_to('Logout', destroy_user_session_path, :method => :delete) 。 使用button_to Rails將在進行正確的DELETE調用上進行繁重的工做。 而後,您能夠根據須要設置按鈕的樣式,使其看起來像一個連接。

#4樓

不要忘記在application.js中添加如下行(Rails 3)

//= require_self
//= require jquery
//= require jquery_ujs

jquery_ujs包含到個人Rails應用程序中,如今可使用了。


#5樓

這個問題已經有不少答案。 對我來講,問題有兩個方面:

  1. 當我擴展路線時:

    devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
  2. 我收到警告稱此產品已貶值,所以我將其替換爲:

    devise_scope :users do get '/users/sign_out' => 'devise/sessions#destroy' end
  3. 我覺得我會刪除個人jQuery。 很差的選擇。 Devise正在使用jQuery「僞造」 DELETE請求並將其做爲GET發送。 所以,您須要:

    //= require jquery //= require jquery_ujs
  4. 而且固然與前面提到的連接相同:

    <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
相關文章
相關標籤/搜索