Come up with: redefine routes and controllers at the same time

I want to simultaneously update my development routes and session controller from this gem. How to do it?

I thought about:

 devise_for :admins, :skip => [:sessions], 
  controllers: { sessions: "admins/sessions" }

  devise_scope :admin do
    get    'login' => 'devise/sessions#new', :as => :new_admin_session
    post   'login' => 'devise/sessions#create', :as => :admin_session
    delete 'logout' => 'devise/sessions#destroy', :as => :destroy_admin_session
  end

but my paths go, but the controller doesn’t. How can I exercise this right?

+4
source share
2 answers

When you specify controllers: { sessions: "admins/sessions" }, this means that you have a file with a name sessions_controller.rbalong this path: app/controllers/admins/sessions_controller.rband it starts with:

module Admins
  class SessionsController < Devise::SessionsController

If this is the controller that you want to use in your application, then in the block devise_scopeyou should tell it to use admins/sessions, and not devise/sessions, for example:

devise_scope :admin do
  get    'login' => 'admins/sessions#new', :as => :new_admin_session
  post   'login' => 'admins/sessions#create', :as => :admin_session
  delete 'logout' => 'admins/sessions#destroy', :as => :destroy_admin_session
end
+1
source

Sort of:

devise_for :admin, exclude: [:sessions] do
   get '/login', to: 'sessions#new', as: :new_admin_session
   post '/login', to: 'sessions#create', as: :admin_session
   delete '/logout', to: 'sessions#destroy', as: :destroy_admin_session
end
+1

Source: https://habr.com/ru/post/1625039/


All Articles