У меня была эта проблема раньше ...
Есть несколько вещей, которые вы можете сделать, чтобы добиться желаемой маршрутизации URL ...
Во-первых, с имеющимся у вас кодом я бы посоветовал взглянуть на то, что rake routes
в командной строке производит для всего, что связано с путями page_path или page_product / product_page, и посмотреть, какие URL-адреса он перехватывает + их именованные маршруты.
Если это не совсем то, что вы хотите .. тогда вы можете попробовать:
get '/:id' => 'products#show'
вместо вашего # WHAT_DO_I_TYPE_HERE
Хотя, возможно, вам придется наложить ограничение на это (см. Ссылки внизу), чтобы у вас все еще могли быть свои /mypage/edit
и mypage/new
и т. Д. *
Что вы действительно хотите сделать, это настроить маршрут, который выглядит следующим образом:
match '/:page_id/:id' => 'products#show', :as => 'product'
Это должно идти где-то выше этих маршрутов и будет доступно через product_show_path
. Предполагается, что вы используете стандарт отношения / принадлежит.
Вы можете переименовать часть :as => 'product'
на любую, какую захотите,
Например: :as => 'public_product'
Затем обновите ваши ссылки, чтобы показывать public_products_path, где это необходимо
В ваших продуктах # show action вы должны выполнить:
@product = Product.find(:id => params[:id], :page_id => params[:page_id])
вы также можете посмотреть, как накладывать ограничения на маршруты ...
Я собрал Gist для своей справки, которая может быть вам полезна.
https://gist.github.com/1908782
Кроме того, я натолкнулся на этот ответ на другой вопрос, который может вам тоже помочь ... https://stackoverflow.com/a/5443829/308701
Надеюсь, это чем-то поможет: D