Вложить или не вложить? - PullRequest
       32

Вложить или не вложить?

11 голосов
/ 03 октября 2008

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 03 октября 2008

Я склонен следовать совету Джеймиса Бака и никогда не вкладывать больше одного уровня в глубину.

Edit: Если вы собираетесь вложить более 1 уровня, я бы попробовал новую функцию мелких маршрутов в Edge

2 голосов
/ 03 октября 2008
users/:user_id/companies/:company_id/locations/

Хотя технически это нормально, не будет ли именованный помощник маршрута, следовательно,

user_company_location_path( user_id, company_id, location_id )

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

1 голос
/ 03 октября 2008

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

Например

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

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

Мое текущее приложение, которое прошло на прошлой неделе и удалило большинство вложенных маршрутов. (Конечно, YMMV) * ​​1008 *

...