Вложенные ресурсы или нет для категорий? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть приложение, построенное на Rails 3.1.3, которое имеет продукты и категории. Категории связаны с другими категориями, поэтому категория может быть родительской или дочерней категорией. Затем продукты относятся к детской категории.

Теперь я думаю о том, как мне определить маршруты. Это хорошая идея, чтобы как-то вкладывать ресурсы в категории и продукты? В идеале я хотел бы, чтобы URL-адреса были такими:

example.com/parent/child/product-1234

like this:
example.com/clothes/underwear/some-socks-1234

or maybe like this to keep it restful?
example.com/p/clothes/c/underwear/....

Но, может быть, это немного грязно с маршрутами? Думаю, мне пришлось бы вкладывать категорию в себя?

Есть идеи, как этого добиться?

EDIT: Должен ли я создать категории маршрутов, как это:

resources :categories, :as => "parent" do
    resources :categories, :as => "child"
end

или подобное? Не так важно, чтобы продукт был вложен в категории. Может быть, это просто усложнит управление ...

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Я бы добавил дополнительный маршрут помимо RESTful для поддержки ваших URL. Это игнорирует категории (они даже не должны существовать) и маршруты непосредственно к продукту.

  ...

  resources :products
  resources :categories

  match ':parent/:child/:product' => "products#show"

  ...

В вашем шоу-действии вы можете просто проверить, какие из params[:product] и params[:id] установлены, и обрабатывать различные маршруты. Также будут доступны params[:parent] и params[:child], но я бы посоветовал просто найти продукт и получить категорию через этот объект, поскольку он должен быть более надежным.

1 голос
/ 03 декабря 2011

Вы можете быть RESTful или нет, у вас не может быть обоих способов.

Если Category является ресурсом, вы можете определить маршруты с помощью оператора resource :categories и использовать встроенную поддержку Rails дляОСТАЛЬНОЕ.Но тогда все категории должны быть доступны через categories/id.Если вы хотите, чтобы разные категории были доступны по разным маршрутам, значит, вы не являетесь RESTful и не можете использовать поддержку REST от Rails.

В качестве альтернативы вы можете сказать, что родительская и дочерняя категории - это разные ресурсы и снова быть RESTful.1007 *

Редактировать: глядя на мой ответ сейчас (после того, как он был принят), я чувствую, что, вероятно, был слишком жестким.Ответ, вероятно, должен быть «это зависит» (как обычно).Если приложение CRUD (admin), я бы придерживался простых категорий и вложенных продуктов (мелкие).На витрине магазина, где вам нужен красивый URL, вы можете иметь маршруты и действия, не связанные с REST.Это просто означает больше кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...