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.