添加您自己的自定义路线进行设计

时间:2019-02-11 19:04:46

标签: ruby-on-rails devise

我看到了很多关于如何在设计中重命名已经声明的路线的帖子。我想扩展设计以拥有自己的路由检查和空闲会话。我正在每隔1分钟实施一次简单的JS检查,我想在devise会话控制器中点击“ 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',因为耙线显示了这一点:

check_active GET      /check_active(.:format)

但是当它触发时,控制器404会用

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]

):

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

devise_scope :user do
    get '/check_active' => 'sessions#check_active'
end
相关问题