Динамическая генерация URL для разделов сайта - PullRequest
0 голосов
/ 05 апреля 2011

Я думаю о разных разделах сайта веб-приложения Rails 3. Разделы сайта должны показывать одни и те же ресурсы, используя тот же контроллер и те же представления.

Таким образом, http://foo.org/premium/products/1 должен представлять тот же продукт, что и http://foo.org/products/1 (возможно, с некоторыми изменениями, зависящими от раздела).

Для обработки того, что я думал о переписывании URL-адреса (может быть, в rout.rb, на уровне стойки или на уровне сервера), так что http://foo.org/premium/products/1 становится http://foo.org/products/1?section=premium. Есть ли лучшие решения для этого?

Но настоящая проблема, которую я вижу, заключается в создании ссылок на этих сайтах, поскольку те должны сохранить раздел. Например. ссылка на сайте http://foo.org/premium/products/1 на товар с идентификатором 2 должна быть http://foo.org/premium/products/2, а не http://foo.org/products/2?section=premium.

К сожалению, это не так тривиально, как link_to и * _path не знают о разделах. Я также хочу сделать это очень динамичным, чтобы я мог легко добавлять и удалять разделы, не касаясь статических маршрутов.

Я думал о переписывании URL-адресов после того, как они были сгенерированы link_to. Будет ли это хороший подход? Любые другие предложения?

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

Вы можете использовать пространство имен (как сказал @ jpx777), структура вашего проекта должна выглядеть следующим образом:

app/
+controllers/
++premium/
+++products_controller.rb
++products_controller.rb
+views/
++premium/
+++products/
++++...(premium product related views)
++products/
+++...(product related views)

И в вашем rout.rb:

namespace "premium" do
  resources :products
end
resources :products
1 голос
/ 05 апреля 2011

Если единственное различие между маршрутами - это добавление premium, то это будет подход к пространству имен

0 голосов
/ 07 апреля 2011

Наконец, я выбрал подход переписывания URL-адресов, поскольку между этими разделами сайта есть незначительные изменения (например, другой фон).Таким образом, я мог бы повторно использовать все классы MVC вместо создания новых вещей при использовании, например, пространств имен маршрутизации.

Для перезаписи URL я использую промежуточное программное обеспечение Rack.Все входящие URL перезаписываются rack-rewrite .Ссылки тела ответа переписываются другим пользовательским промежуточным программным обеспечением (что-то вроде того, что сделано в этой стенограмме Railscasts .

, поэтому URL-адреса, подобные /premium/products/1, будут иметь вид /products/1?section=premium (и наоборот).

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