Документация по Ruby on Rails 3: «Можно ли» \ «Желательно ли» использовать (хотя бы) вложенный ресурс? - PullRequest
2 голосов
/ 17 февраля 2011

Я читаю Rails Routing from Outside In , в частности, раздел 2.7 Вложенные ресурсы \ 2.7.1 Ограничения на вложение, где написано

Ресурсы никогда не должны быть вложены глубиной более 1 уровня.

Что это значит?То есть, «могу ли я» \ «это целесообразно» использовать один вложенный ресурс уровня, подобный этому

namespace "users" do
  resources :publishers do
    resources :magazines
  end
end

, или я должен использовать что-то вроде этого

namespace "users" do
  resources :publishers
  resources :magazines
end

? О чем вы думаете?

Если это рекомендуемый подход, как написать маршруты (например, new_users_publisher_magazine ...)?

Ответы [ 5 ]

1 голос
/ 17 февраля 2011

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

namespace :users do
  shallow do
    resources :publishers do
      resources :maagazines
    end
  end
end
1 голос
/ 17 февраля 2011

Это зависит от того, что вам нужно.

namespace "users" do
  resources :publishers do
    resources :magazines
  end
end

даст вам маршруты, отличные от

namespace "users" do
  resources :publishers
  resources :magazines
end

С одной стороны, вторая даст вам маршруты типа

/ users / 1 / publishers / и /users / 1 / magazines

, тогда как первый дает

/ users / 1 / publishers / 1 / magazines

Рекомендуется не вкладывать так много в ваши маршруты, так какнасколько это возможно, если только вам НЕ ДЕЙСТВИТЕЛЬНО действительно нужно, как будто ваша жизнь зависела от этого: P.Впрочем, это именно то, что я думаю, потому что гнездо из трех уровней, вероятно, заставит вас страдать больше, чем поможет.

0 голосов
/ 17 февраля 2011

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

Для просмотра именованных помощников маршрутов для ваших ресурсов вы можете использовать 'rake route'.Это дает хороший обзор определенных маршрутов.

0 голосов
/ 17 февраля 2011

В нем указано более одного уровня, так что это правильно и рекомендуется, поскольку у вас всегда будет доступ к журналу через издателя:

namespace "users" do
  resources :publishers do
    resources :magazines
  end
end
0 голосов
/ 17 февраля 2011

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

...