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 应该处理的事情。请解释一下这种行为。
归档时间: |
|
查看次数: |
8936 次 |
最近记录: |