注销时无法为UsersController找到操作'show'设计铁轨

时间:2013-01-19 23:52:08

标签: ruby-on-rails devise routes

我在这里挣扎了几个小时非常愚蠢的事情。 没有哗众取宠直截了当。当我将其粘贴到我的帖子#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再检查一下......有什么想法?

4 个答案:

答案 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应该处理的事情。请解释一下这种行为。