注销时找不到 UsersController 的“show”操作 | 设计导轨

MFC*_*FCS 5 routes ruby-on-rails devise

几个小时以来我一直在为一些非常愚蠢的事情而苦苦挣扎。没有哗众取宠,直奔主题。当我将其粘贴到我的 posts#index 页面视图文件中时:

  <p><%= link_to "log out", destroy_user_session_path, :method => :delete %></p>
Run Code Online (Sandbox Code Playgroud)

并在浏览器中单击它,用户成功退出。然而...

当我在其他地方执行此操作(例如用户登录后或用户注册后)时,用户会尝试从我们可以称为 users#index 的页面注销。然后,只有在单击注销按钮时才会出现此错误。

Unknown action

The action 'show' could not be found for UsersController
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西,jquery和jquer.uls或者其他东西都包含在application.js文件中,

这些是我的路线,我认为它们是正确的。

Proxima::Application.routes.draw do
  devise_for :users
  resources :users
  resources :dashboard
  resources :posts
  authenticated :user do
  root :to => 'dashboard#index'
end
  resources :welcome
  devise_for :users
  resources :users
  resources :dashboard
  resources :posts
  root :to => 'welcome#index'
end
Run Code Online (Sandbox Code Playgroud)

这太愚蠢了,我不明白这里发生了什么,我一次又一次地收到这条愚蠢的消息,但仍然没有任何事情发生。然后我决定在 UsersController 中实际写下“show”操作,但是......当我写入redirect_towelcome_path时它不会注销,我通过再次实际访问根url来检查......有什么想法吗?

MFC*_*FCS -2

所以错误是:

Unknown action

The action 'show' could not be found for UsersController
Run Code Online (Sandbox Code Playgroud)

所以我进入控制器并定义了显示操作。然后我查看了一些 Devise 文档并注意到了这个助手,然后我使用了它:sign_out :user。这是临时修复:

  def show
    sign_out :user
    redirect_to welcome_path
end
Run Code Online (Sandbox Code Playgroud)

然而,这只注销了用户并重定向到welcome_path,但随后我收到了另一个错误:

Unknown action

The action 'show' could not be found for WelcomeController
Run Code Online (Sandbox Code Playgroud)

所以我也为欢迎控制器定义了显示操作:

class WelcomeController < ApplicationController
  def show
    render :index
  end
end
Run Code Online (Sandbox Code Playgroud)

这将用户重定向回根页面。瞧!然后我单击页面上的登录和按钮,最后看到我被要求登录该页面。我已成功注销并将用户重定向回欢迎索引 URL。万岁!:D

然而现在奇怪的部分来了。我不明白为什么这有效。因此,当我放置此代码时,从根 URL 开始:

  <p><%= link_to "log out", destroy_user_session_path, :method => :delete %></p>
Run Code Online (Sandbox Code Playgroud)

然后在登录后单击它,它会成功注销,而无需向控制器或类似的内容进行任何额外的写入。非常顺利,不需要任何工作,但是当用户尝试从其他页面而不是 ROOT URL 注销时,它不起作用,我在 UsersController 中收到上面的错误

我不明白为什么注销请求要求在 UsersController 中显示操作。当它是销毁用户会话的 GET 请求时。我的意思是为什么我必须在sign:out :user控制器内部指定,而这是 DEVISE 应该处理的事情。请解释一下这种行为。