2016-05-26 2 views
1

У меня есть проблема с методами, как current_manager, current_receptionist и т.д.Невидимые динамические методы аутентификации DEViSE

Есть невидимая, без методов для клиента. Это вызвано маршрутизацией. Я разместил devise_for всех типов людей (без клиента) в бэкэнде пространства имен. Когда я перемещаюсь над этим пространством имен, доступны все методы. Однако я хочу это заявление:

devise_for :receptionists, :managers... 

имеют в пространстве имен бэкэнд.

Как мне изменить свой код, чтобы разрешить правильные методы видимости?

Динамические методы в контроллеры/backend_controller.rb:

class BackendController < ApplicationController 
     %w(Manager Receptionist Lifeguard Trainer).each do |k| 
     define_method "current_#{k.underscore}" do 
      current_person if current_person.is_a?(k.constantize) 
     end 

     define_method "authenticate_#{k.underscore}!" do |_opts = {}| 
      send("current_#{k.underscore}") || not_authorized 
     end 

     define_method "#{k.underscore}_signed_in?" do 
      !send("current_#{k.underscore}").nil? 
     end 
     end 
end 

Routing:

Rails.application.routes.draw do 
    devise_for :people, controllers: { sessions: 'devise/sessions' }, 
         skip: [:registrations] 
    devise_for :clients, skip: :sessions 
    namespace :backend do 
    devise_for :receptionists, :managers, :lifeguards, :trainers, 
       skip: :sessions, controllers: { registrations: 'devise/registrations' } 
    end 
end 
+0

Может ли кто-нибудь мне помочь? –

ответ

0

я решил мою проблему, путем добавления методов application_helper (в backend_controller еще держать).

Смежные вопросы