ruby-on-rails - form_with - rails routes command
¿Anidar o no anidar? (3)
Tiendo a seguir el consejo de Jamis Buck y nunca anidar más de un nivel profundo.
Editar: si va a anidar más de 1 nivel, echa un vistazo a la nueva función de rutas superficiales en Edge
Premisa: generalmente durante la preparación de una nueva aplicación Ruby on Rails, dibujo modelos y relaciones con respecto a las navegaciones de usuario. Usualmente llego a un lugar donde tengo que preguntarme, si debo o no ir más allá de la "regla de oro" habitual de anidar no más de 1 nivel de profundidad. A veces siento la necesidad de anidar, en lugar de crear otra ruta de espacio de nombres y duplicar el trabajo.
Aquí hay un ejemplo:
Modelos: usuario, empresa, ubicación
El usuario tiene y pertenece a muchas compañías (muchas a muchas)
El usuario tiene y pertenece a muchas ubicaciones (muchas a muchas)
La compañía tiene y pertenece a muchas ubicaciones (muchas a muchas)
Rutas:
Anidación de 1 nivel
users /: user_id / companies / - enumera todas las empresas relacionadas con un usuario
users /: user_id / locations / - enumera todas las ubicaciones relacionadas con un usuario
más de 1 nivel de anidación
users /: user_id / companies /: company_id / locations / - enumera todas las ubicaciones de la empresa de un usuario
Entonces, mi pregunta es si es apropiado anidar más de 1 nivel de profundidad en RoR o no. ¿Si o no? ¿Y por qué?
users/:user_id/companies/:company_id/locations/
Si bien técnicamente esto está bien, ¿no sería el asistente de ruta nombrado por lo tanto
user_company_location_path( user_id, company_id, location_id )
tener que cargar 3 parámetros de ese tipo es molesto. Cualquier cosa molesta es probablemente una bandera roja.
Aunque suena bien en teoría, he encontrado que anidar más de un nivel puede empezar a ser confuso, particularmente si tienes el mismo controlador nombrado en diferentes niveles (que puede ser bastante común)
P.ej
user/x/blog/y/profile/z, and
user/x/profile/a
A menudo me daré cuenta de que estoy trabajando en un espacio de nombres diferente al que creo que estoy trabajando. Si hacen cosas similares, pero diferentes, puede ser bastante confuso =)
Mi aplicación actual, pasé la semana pasada y eliminé la mayoría de las rutas anidadas. (Por supuesto, YMMV)