Подтвердить что ты не робот

Разработать в пространстве имен

Я пытаюсь разделить мой проект рельсов в интерфейсе для обычных пользователей и back-end для админов. Поэтому я создал пространство имен "admin", чтобы я мог легко контролировать определенные контроллером методы/макеты/аутентификацию администратора в admin.

Я использую Devise для регистрации/проверки подлинности только моих администраторов. Поскольку он используется только для администраторов, я пытаюсь переместить Devise в пространство имен admin.

Я не смог найти то, что искал в документации в Devise, но я пробовал что-то вроде этого в routes.rb:

namespace 'admin'do 
  devise_for :admins
end

Я также попытался создать настраиваемый контроллер Devise:: Sessions, но это тоже не сработало.

Кто-нибудь знает, как это сделать? Должен ли я просто использовать обычные маршруты для разработки с помощью пользовательского (административного) макета?

4b9b3361

Ответ 1

Просто "перемещение". Представление в пространство имен admin неверно. В Devise используются контроллеры типа Devise::SessionsController, которые нельзя "переместить".

Я обычно создаю свои собственные контроллеры и наследую их от Devise:

class Admin::SessionsController < ::Devise::SessionsController
  layout "admin"
  # the rest is inherited, so it should work
end

И настройте это в config/routes.rb:

devise_for :admins, :controllers => { :sessions => "admin/sessions" }

Или вы можете изменить только макет, сделав макет более сложным:

class ApplicationController < ActionController::Base

  layout :layout

  private

  def layout
    if devise_controller? && devise_mapping.name == :admin
      "admin"
    else
      "application"
    end
  end

end

Ответ 2

Как просто перемещать метод devise_for в область видимости:

scope '/admin' do
  devise_for :admins
end

С пространством имен контроллеры попытаются найти Admin::SessionController, который не существует. С областью действия это не так, поэтому это должно работать.

Ответ 3

Как насчет того, чтобы указать путь к пути, разместите это вне своего пространства имен.

devise_for :users, path: 'admins'

Это создаст следующие маршруты

new_user_session          GET      /admins/sign_in(.:format)          devise/sessions#new
user_session              POST     /admins/sign_in(.:format)          devise/sessions#create
destroy_user_session      DELETE   /admins/sign_out(.:format)         devise/sessions#destroy
user_password             POST     /admins/password(.:format)         passwords#create
new_user_password         GET      /admins/password/new(.:format)     passwords#new
edit_user_password        GET      /admins/password/edit(.:format)    passwords#edit
                          PUT      /admins/password(.:format)         passwords#update
cancel_user_registration  GET      /admins/cancel(.:format)           registrations#cancel
user_registration         POST     /admins(.:format)                  registrations#create
new_user_registration     GET      /admins/sign_up(.:format)          registrations#new
edit_user_registration    GET      /admins/edit(.:format)             registrations#edit
                          PUT      /admins(.:format)                  registrations#updat
                          DELETE   /admins(.:format)                  registrations#destroy

Вам не нужно ничего менять в этом случае, если это то, что вы ищете.

Счастливое кодирование:)

Ответ 4

Обе версии Jack Chu и iain должны решить проблему плюс генерировать ваши взгляды, чтобы настроить макет формы входа.

Итак, в config/routes.rb у вас должно быть

scope '/subfolder' do
   devise_for :admins, :controllers => { :sessions => "subfolder/sessions" }
end

namespace :subfolder do
  match '/', :to => 'subcontroller#action'
end

Помните, что вы создаете свои собственные контроллеры для сеансов, как вы уже делаете. Вероятно, вам также нужно создать свои представления, используя rails generate devise:views

Проверьте это на наличие каких-либо сомнений при разработке задач.

Ответ 5

В дополнение к первому решению ответа iain я должен был генерировать представления для разработки, иначе он выдает исключение шаблона.

генерировать представления с помощью

rails g devise_views

Представления будут отображаться в представлениях > devise. Переместить созданные сеансы карты на виды карты > admin

Ответ 6

Если вы хотите поместить свои представления в представления/admin/admins/и ваши контроллеры в контроллеры /admin/admins/:

your sessions_controller.rb в контроллерах /admin/admins:

class Admin::Admins::SessionsController < ::Devise::SessionsController
  layout "admin/connection"
end

routes.rb:

namespace :admin do |admin|
    devise_for :admins, :controllers => { :sessions => "admin/admins/sessions" }
end

Создание графических представлений:

rails g devise:views admin/admins