рельсы разработали проверить класс вошли в модель - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть несколько моделей, использующих устройства, такие как Администратор, Студент и Советник

Я не хочу использовать роли, так как это усложнит ситуацию в этом случае.

Я хочу использовать один макет и показывать меню и т. Д., В зависимости от класса модели, например

= render "shared/#{resource.class}_menu"

Есть ли способ получить класс зарегистрированного объекта без каких-либо других условий, как в after_sign_in_path_for и т. Д.

1 Ответ

0 голосов
/ 19 июня 2019

Так что я делаю в этом случае, когда вы хотите, чтобы различные области были для Администратор, Студент и Советник

Вы можете указать пространство имен для каждой роли или войти в систему, как это

#config/routes.rb
Rails.application.routes.draw do

  devise_for :admins, :controllers => { registrations:  'admins/registrations',
                                       sessions:        'admins/sessions',
                                       passwords:       'admins/passwords',
                                       confirmations:   'admins/confirmations'
  }
  authenticate :admin do
    namespace :admins do
      ....
      root :to => 'something#index'
    end
  end

  devise_for : students, :controllers => { registrations:   'students/registrations',
                                           sessions:        'students/sessions',
                                           passwords:       'students/passwords',
                                           confirmations:   'students/confirmations'
  }
  authenticate :student do
    namespace :students do
      ....
      root :to => 'something#index'
    end
  end

Теперь вы можете создать модель устройства для каждого пространства имен.

#app/controllers/admin_controller.rb
class AdminController < ApplicationController
  before_filter :authenticate_admin!

end


Для контроллеров Devise вы можете использовать их как

#app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController

end

Для базовых контроллеров приложений вы можете использовать их следующим образом.

#app/controllers/users/somethings_controller.rb
class Users::SomethingsController < UserController
...
end

Я надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...