设计:同时覆盖设计路线和控制器

时间:2016-01-19 22:23:02

标签: ruby-on-rails ruby-on-rails-4 devise

我想同时从这个gem中挖掘我的设计路线和会话控制器。我该怎么做?

我想到了:

 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

但我的路径正在变化,但控制器 - 不是。我该如何实现这个权利?

2 个答案:

答案 0 :(得分:1)

如下:

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 :(得分:1)

当您指定controllers: { sessions: "admins/sessions" }时,这意味着您在此路径中有一个名为sessions_controller.rb的文件:app/controllers/admins/sessions_controller.rb,并且它始于:

module Admins
  class SessionsController < Devise::SessionsController

如果这是您希望应用使用的控制器,那么在devise_scope块中,您必须告诉它使用admins/sessions,而不是devise/sessions,如下所示:

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