在我添加此代码之前,设计不会注销用户。为什么?

Devise would not sign off users until I added this code. Why?

不知为何这次申请的时候

<%= link_to "Sign Out", destroy_user_session_path, method: :delete%>

它returns一个user/sign_out未找到错误

通过 Whosebug 挖掘我发现通过应用

devise_scope :user do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end

我的 routes.rb 会允许它工作。确实如此。

后来,我决定再试一次,于是我去掉了上面的代码,以用户身份登录,神奇的是sign_out路径link在没有代码的情况下又能正常工作了。

这是怎么回事?

在您前往 delete 的路线中复制 get

devise_scope :user do
    delete '/users/sign_out' => 'devise/sessions#destroy'
end

而且我认为它应该向您的自定义路由添加其他会话操作并在您的设计路由中跳过会话控制器:

as :user do
    delete '/users/sign_out' => 'devise/sessions#destroy', :as => :destroy_user_session
    get '/users/signin' => 'devise/sessions#new', :as => :new_user_session
    post '/users/signin' => 'devise/sessions#create', :as => :user_session
end

devise_for :users, :skip => [:sessions]