Подтвердить что ты не робот

К гнезду или не к гнезду?

Предпосылка: Обычно во время подготовки нового приложения Ruby on Rails я рисую модели и отношения относительно пользовательских навигаций. Обычно я попадаю в место, где мне нужно спросить себя, должен ли я выйти за пределы обычного "эмпирического правила" гнездования не более 1 уровня глубины. Иногда я чувствую необходимость гнездования, а не создание другого маршрута пространства имен и дублирования работы.
Вот пример:

Модели: Пользователь, компания, местоположение
Пользователь имеет и принадлежит многим компаниям (многие из многих)
Пользователь имеет и принадлежит многим местоположениям (многие для многих)
Компания имеет и принадлежит многим местам (многим многим)

Маршруты:
1 уровень вложенности
users/: user_id/companies/- список всех компаний, связанных с пользователем
users/: user_id/locations/- список всех местоположений, связанных с пользователем
размещение более 1 уровня
users/: user_id/companies/: company_id/location/- список всех местоположений компании пользователя

Итак, мой вопрос заключается в том, целесообразно ли гнездо более 1 уровня в RoR? Да или нет? И почему?

4b9b3361

Ответ 1

Я склонен следовать за Jamis Buck советом и никогда не гнездю более одного уровня.

Изменить: Если вы собираетесь вложить более одного уровня, я бы рассмотрел новую функцию мелкие маршруты в Edge

Ответ 2

users/:user_id/companies/:company_id/locations/

В то время как технически это прекрасно, не означает, что указанный помощник маршрута

user_company_location_path( user_id, company_id, location_id )

имея в себе раунд 3 раунда, это раздражает. Все, что раздражает, вероятно, является красным флагом.

Ответ 3

В то время как это звучит хорошо в теории, я обнаружил, что вложенность более одного уровня может начать запутываться - особенно если у вас есть тот же самый именованный контроллер на разных уровнях (что может быть довольно распространенным)

Например,

  user/x/blog/y/profile/z, and
  user/x/profile/a

Я часто нахожу, что я работаю в другом пространстве имен, к тому, что, по-моему, я работаю. Если они делают похожие, но разные вещи, он может запутаться =)

В моем текущем приложении я прошел через прошлую неделю и удалил большинство вложенных маршрутов. (Конечно, YMMV)