我在这里挣扎了几个小时非常愚蠢的事情。 没有哗众取宠直截了当。当我将其粘贴到我的帖子#index page view file:
<p><%= link_to "log out", destroy_user_session_path, :method => :delete %></p>
并在浏览器中单击它,用户成功注销。然而...
当我在其他地方执行此操作时,例如在用户登录后或用户注册后,用户会尝试从我们可以调用用户#index的页面注销。 然后,单击退出按钮时,它只会给我这个错误。
Unknown action
The action 'show' could not be found for UsersController
我已经尝试了很多东西,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
这很愚蠢,我无法理解这里发生了什么,我一次又一次得到那个愚蠢的消息,但仍然没有发生任何事情。然后我决定在UsersController中写下动作“show”,但是......当我写redirect_to welcome_path时它没有注销,我通过实际访问根URL再检查一下......有什么想法?
答案 0 :(得分:1)
如果使用jQuery,需要在您的视图中调用“用于jQuery的Unobtrusive脚本适配器”。
<%= javascript_include_tag "jquery_ujs" %>
答案 1 :(得分:0)
我建议您调查为什么:method => :delete
链接仍然在show
操作(响应GET的操作)结束。
在link_to中正确设置javascript :method => :delete
应该可以正常工作,并转到设计会话控制器中的#destroy
方法。
您也可以尝试在登录/退出后更改默认重定向路径:https://github.com/plataformatec/devise/wiki/How-To:-Change-the-redirect-path-after-destroying-a-session-i.e.-signing-out
答案 2 :(得分:0)
如果您错误地删除了
// = require jquery_ujs
在application.js
答案 3 :(得分:-2)
所以错误是:
Unknown action
The action 'show' could not be found for UsersController
所以我进入控制器并定义了 show 操作。然后我查看了一些Devise文档并注意到了我使用的这个助手:sign_out :user
。这是临时修复:
def show
sign_out :user
redirect_to welcome_path
end
然而,只记录了用户并重定向到welcome_path,但后来又出现了另一个错误:
Unknown action
The action 'show' could not be found for WelcomeController
所以我也为Welcome控制器定义了 show 操作:
class WelcomeController < ApplicationController
def show
render :index
end
end
将用户重定向回根页面。瞧!然后我点击了页面上的登录和按钮,最后看到我被要求登录该页面。我已成功注销并将用户重定向回欢迎索引URL。万岁! :D
然而现在出现了奇怪的部分。我不明白为什么会这样。因此,当我放置此代码时,从根URL:
<p><%= link_to "log out", destroy_user_session_path, :method => :delete %></p>
然后在我登录后点击它,它成功注销,无需任何额外的写入控制器或类似的东西。非常顺利,不需要工作,但当用户尝试从其他页面注销而不是ROOT URL时,它不起作用,我在上面用 UsersController 得到了这个错误。
我不明白为什么退出请求要求 UsersController 中的show动作。当它是一个销毁用户会话的GET请求时。我的意思是为什么我必须在控制器内指定sign:out :user
,这是DEVISE应该处理的事情。请解释一下这种行为。