【问题标题】:add your own custom route to devise添加您自己的自定义路线来设计
【发布时间】:2021-02-03 23:23:15
【问题描述】:

我看过很多关于如何在设计中重命名已声明的路由的帖子。我想扩展设计以进行自己的路线检查和空闲会话。我每 1 分钟执行一次简单的 js 检查,我想在设计会话控制器中点击“check_active”。我试过了,但没有运气:

devise_scope :sessions do
    get 'check_active'
end

有没有办法扩展自定义路线(不是重命名已经存在的路线)?

更新 - 快到了,我做到了

# already had this in routes

devise_for :users, :controllers =>
    { registrations: 'registrations',
    confirmations: 'confirmations',
    sessions: 'sessions',
    passwords: 'passwords',
    omniauth_callbacks: "omniauth_callbacks"}

# added this

devise_scope :sessions do
    get '/check_active' => 'sessions#check_active'
end

我有一个 js 触发,我让它得到 '/check_active',因为 rake 路由显示如下:

check_active GET      /check_active(.:format)

但是当它触发时,控制器 404s 与

AbstractController::ActionNotFound(找不到路径“/check_active”的设计映射。
这可能有两个原因:

1) You forgot to wrap your route inside the scope block. For example:                                                                                        

  devise_scope :user do                                                                                                                                      
    get "/some/route" => "some_devise_controller"                                                                                                            
  end                                                                                                                                                        

2) You are testing a Devise controller bypassing the router.                                                                                                 
   If so, you can explicitly tell Devise which mapping to use:                                                                                               

   @request.env["devise.mapping"] = Devise.mappings[:user]

):

【问题讨论】:

  • 你在 session_controller 中创建了 check_active 方法对吧?

标签: ruby-on-rails devise


【解决方案1】:

如果你覆盖了 Devise 的默认控制器,添加你自己的路由与任何其他控制器没有什么不同。

在您create your devise controllers 覆盖后,请执行以下操作:

在sessions_controller下声明一个方法

# app/controllers/devise/sessions_controller.rb
def check_active
   # do what you want to do
end

在你的路由器中:

# config/routes.rb
devise_scope :sessions do
    get 'check_active', to: "devise/sessions#check_active"
end

【讨论】:

  • 感谢填充器填充器填充器
  • 实际上我认为这是可行的,我得到AbstractController::ActionNotFound (The action 'check_active' could not be found for Devise::SessionsController)
  • 即使 rake 路由显示 rake routes|grep check_active check_active GET /check_active(.:format)
  • 我的错误,我没有使用 devise/我有一个 root 控制器,再次感谢
  • 更新问题以获取所需帮助的详细信息
【解决方案2】:

我正在尝试同样的事情,并意识到范围应该是 user 而不是 sessions,还要确保它必须是单数。

devise_scope :user do
    get '/check_active' => 'sessions#check_active'
end

编辑:添加link 以帮助文档更好地理解

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2016-01-25
    • 2021-08-17
    相关资源
    最近更新 更多