Ответ 1
Я склонен следовать за Jamis Buck советом и никогда не гнездю более одного уровня.
Изменить: Если вы собираетесь вложить более одного уровня, я бы рассмотрел новую функцию мелкие маршруты в Edge
Предпосылка:
Обычно во время подготовки нового приложения Ruby on Rails я рисую модели и отношения относительно пользовательских навигаций. Обычно я попадаю в место, где мне нужно спросить себя, должен ли я выйти за пределы обычного "эмпирического правила" гнездования не более 1 уровня глубины. Иногда я чувствую необходимость гнездования, а не создание другого маршрута пространства имен и дублирования работы.
Вот пример:
Модели: Пользователь, компания, местоположение
Пользователь имеет и принадлежит многим компаниям (многие из многих)
Пользователь имеет и принадлежит многим местоположениям (многие для многих)
Компания имеет и принадлежит многим местам (многим многим)
Маршруты:
1 уровень вложенности
users/: user_id/companies/- список всех компаний, связанных с пользователем
users/: user_id/locations/- список всех местоположений, связанных с пользователем
размещение более 1 уровня
users/: user_id/companies/: company_id/location/- список всех местоположений компании пользователя
Итак, мой вопрос заключается в том, целесообразно ли гнездо более 1 уровня в RoR? Да или нет? И почему?
Я склонен следовать за Jamis Buck советом и никогда не гнездю более одного уровня.
Изменить: Если вы собираетесь вложить более одного уровня, я бы рассмотрел новую функцию мелкие маршруты в Edge
users/:user_id/companies/:company_id/locations/
В то время как технически это прекрасно, не означает, что указанный помощник маршрута
user_company_location_path( user_id, company_id, location_id )
имея в себе раунд 3 раунда, это раздражает. Все, что раздражает, вероятно, является красным флагом.
В то время как это звучит хорошо в теории, я обнаружил, что вложенность более одного уровня может начать запутываться - особенно если у вас есть тот же самый именованный контроллер на разных уровнях (что может быть довольно распространенным)
Например,
user/x/blog/y/profile/z, and
user/x/profile/a
Я часто нахожу, что я работаю в другом пространстве имен, к тому, что, по-моему, я работаю. Если они делают похожие, но разные вещи, он может запутаться =)
В моем текущем приложении я прошел через прошлую неделю и удалил большинство вложенных маршрутов. (Конечно, YMMV)