rails form_with form examples ruby-on-rails ruby nested

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)