es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rails 6: Enrutamiento con scope para el modelo/controlador de Usuario

En mi proyecto de rails 6 (modo desarrollo) he configurado un modelo de Usuario junto con devise.
En routes.rb tengo:

scope :auth do
  devise_for :users
end

resources :users, except: :index
resources :articles, only: [:show, :update]

scope :passport do 
  resources :users, only: :index
  resources :articles, except: [:show, :update]    
end

Los prefijos funcionan como se espera para los artículos, pero no para los usuarios.
Por alguna razón, /passport/users en referencia a users#index no tiene ningún prefijo users_path (GET) en absoluto.
Está sin ningún prefijo.
La solicitud a localhost:3000/passport/users funciona bien.

¿Hay un conflicto con devise?

Me falta algo, ¿qué es?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con el conflicto de nombres entre las rutas definidas en el bloque devise_for :users y el bloque resources :users. Dado que el bloque devise_for :users define sus propias rutas para el modelo User, el bloque resources :users sobrescribe esas rutas y causa el conflicto de nombres.

    Una solución podría ser cambiar el nombre del bloque resources :users a algo como resources :user_profiles o resources :profiles para evitar el conflicto de nombres. Entonces, la ruta passport/users debería usar el prefijo correcto.

    Otra solución podría ser personalizar las rutas generadas por devise_for :users usando la opción :path. Esto te permitiría especificar una ruta de URL diferente para las rutas de Devise, evitando el conflicto con el bloque resources :users. Por ejemplo:

    devise_for :users, path: 'auth'
    

    Esto generaría las rutas de Devise bajo la ruta /auth en lugar de la ruta predeterminada /users.

    En general, es importante tener en cuenta los conflictos de nombres al definir rutas en una aplicación Rails, especialmente al utilizar gemas de terceros como Devise.

Comments are closed.