Rails设计引擎Sign_out链接错误

时间:2014-09-03 10:34:58

标签: ruby-on-rails devise

我已在我的引擎上安装了设备并在application.html.erb文件中应用了以下内容:

<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, :method => :delete %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

它显示No route matches "/users/sign_out"并显示

的错误
<%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>

错误讯息NameError in Devise::Sessions#new

undefined local variable or method `destroy_user_session_path' for #<#<Class:0x007fb4da2e9618>:0x007fb4da2db9a0>

Rake Routes结果

Routes for Fd::Engine:
  users_auth_google_oauth2_callback GET      /users/auth/google_oauth2/callback(.:format)   fd/omniauth_callbacks#google_oauth2
                      fd_test_index GET      /fd/test/index(.:format)                       fd/fd/test#index
fd_omniauth_callbacks_google_oauth2 GET      /fd/omniauth_callbacks/google_oauth2(.:format) fd/fd/omniauth_callbacks#google_oauth2
                   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
                      user_password POST     /users/password(.:format)                      devise/passwords#create
                  new_user_password GET      /users/password/new(.:format)                  devise/passwords#new
                 edit_user_password GET      /users/password/edit(.:format)                 devise/passwords#edit
                                    PATCH    /users/password(.:format)                      devise/passwords#update
                                    PUT      /users/password(.:format)                      devise/passwords#update
           cancel_user_registration GET      /users/cancel(.:format)                        devise/registrations#cancel
                  user_registration POST     /users(.:format)                               devise/registrations#create
              new_user_registration GET      /users/sign_up(.:format)                       devise/registrations#new
             edit_user_registration GET      /users/edit(.:format)                          devise/registrations#edit
                                    PATCH    /users(.:format)                               devise/registrations#update
                                    PUT      /users(.:format)                               devise/registrations#update
                                    DELETE   /users(.:format)                               devise/registrations#destroy
            user_omniauth_authorize GET|POST /users/auth/:provider(.:format)                omniauth_callbacks#passthru {:provider=>/google_oauth2/}
             user_omniauth_callback GET|POST /users/auth/:action/callback(.:format)         omniauth_callbacks#(?-mix:google_oauth2)
                      fd_auth_index GET      /fd/auth/index(.:format)                       fd/fd/auth#index
                               root GET      /                                              fd/auth#index
      omniauth_callbacks_verify_otp GET      /omniauth_callbacks/verify_otp(.:format)       fd/omniauth_callbacks#verify_otp
  omniauth_callbacks_delete_session GET      /omniauth_callbacks/delete_session(.:format)   fd/omniauth_callbacks#sign_out

引擎路线:

Fd::Engine.routes.draw do
devise_for :users,:controllers => { :omniauth_callbacks => "omniauth_callbacks" }, :class_name => "Fd::User", module: :devise
end

2 个答案:

答案 0 :(得分:0)

试试这个:

<%= link_to "Sign out", destroy_user_session_path, :method => :get %>

并确保您的config/initializers/devise.rb

下面有一行
config.sign_out_via = :get

答案 1 :(得分:0)

你在设计中集成了OmniAuth,所以如果用户提供正确的凭证,设计会创建会话,从你的问题我理解会话已成功创建,所以如果你想要清除会话只是在控制器中创建一个动作(你开始会话)并给

redirect_to "/users/sign_out"

尝试

redirect_to destroy_user_session_path

我希望这会起作用