ruby-on-rails namespaces ruby-on-rails-plugins devise

ruby on rails - Diseñar dentro del espacio de nombres



ruby-on-rails namespaces (6)

¿Qué tal si especificas el camino a seguir, colócalo fuera de tu espacio de nombres?

devise_for :users, path: ''admins''

Esto generará las siguientes rutas

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

No tiene que cambiar nada en ese caso, si esto es lo que está buscando.

Happy Coding :)

Estoy tratando de dividir mi proyecto de carriles en un front-end para usuarios regulares y un back-end para administradores. Por lo tanto, he creado un espacio de nombres ''admin'' para que pueda controlar fácilmente los métodos / diseños / autenticación específicos del administrador en el administrador del mapa.

Estoy usando Devise para registrar / autenticar mis administradores solamente. Debido a que solo se usa para administradores, solo estoy tratando de mover Devise al espacio de nombres de administrador.

No pude encontrar exactamente lo que estaba buscando en la documentation de Devise pero intenté algo como esto en routes.rb:

namespace ''admin''do devise_for :admins end

También intenté crear un controlador Devise :: Sessions personalizado, pero eso tampoco pareció funcionar.

¿Alguien sabe como hacer esto? ¿Debo simplemente usar las rutas regulares para diseñar con un diseño personalizado (administrador)?


¿Qué tal si movemos el método devise_for en un ámbito:

scope ''/admin'' do devise_for :admins end

Con el espacio de nombres, los controladores intentarán buscar un Admin::SessionController que no existirá. Con scope no funciona, así que debería funcionar.


Además de la primera solución de la respuesta de iin, tuve que generar vistas de diseño o arroja una excepción faltante de plantilla.

generar vistas con

rails g devise_views

Las vistas estarán ubicadas en views> idear. Mueva las ''sesiones'' del mapa creado a las vistas de mapa> admin


Si desea colocar sus vistas de diseño en views / admin / admins / y sus controladores en los controladores / admin / admins /:

su sessions_controller.rb en controladores / 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

Generando vistas de diseño:

rails g devise:views admin/admins


Simplemente "mover" Devise al espacio de nombres de administrador es incorrecto. Devise usa controladores como Devise::SessionsController y eso no se puede "mover".

Normalmente creo mis propios controladores y los heredo de Devise:

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

Y configure esto en config/routes.rb :

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

O puede cambiar el diseño solamente, haciendo que el diseño sea un poco más complejo:

class ApplicationController < ActionController::Base layout :layout private def layout if devise_controller? && devise_mapping.name == :admin "admin" else "application" end end end


Tanto las soluciones de como las de deberían resolver el problema y generar sus puntos de vista para personalizar el diseño del formulario de inicio de sesión.

Entonces en tu config/routes.rb deberías tener

scope ''/subfolder'' do devise_for :admins, :controllers => { :sessions => "subfolder/sessions" } end namespace :subfolder do match ''/'', :to => ''subcontroller#action'' end

Recuerda di crea tus propios controladores para las sesiones como lo estás haciendo. Probablemente necesitarás generar tus vistas, también usando rails generate devise:views

documentation para cualquier duda sobre las tareas de diseño.