У меня немного проблема с пространствами маршрутов, с которыми я раньше не сталкивался. На самом деле это часть разработки драгоценных камней, которую я делаю, но я переработал эту проблему, чтобы соответствовать более общей ситуации с рельсами.
В принципе, у меня есть путь, основанный на именах, но я хочу, чтобы он направлялся на общий (верхний уровень) контроллер.
Мой контроллер PublishController
, который обрабатывает публикации многих разных типов моделей, которые все соответствуют одному и тому же интерфейсу, но могут находиться под разными пространствами имен. Мои маршруты выглядят так:
# config/routes.rb
namespace :manage do
resources :projects do
get 'publish' => 'publish#create'
get 'unpublish' => 'publish#destroy'
end
end
Проблема заключается в том, что это создает следующие маршруты:
manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"manage/publish", :action=>"create"}
manage_project_unpublish GET /manage/projects/:project_id/unpublish(.:format) {:controller=>"manage/publish", :action=>"destroy"}
Каковы маршруты, которые я хочу, просто не сопоставляя правильный контроллер. Я пробовал все, что я могу придумать, попробовать и позволить контроллеру не переносить пространство имен, но я в тупике.
Я знаю, что могу сделать следующее:
get 'manage/features/:feature_id/publish' => "publish#create", :as => "manage_project_publish"
который производит:
manage_project_publish GET /manage/projects/:project_id/publish(.:format) {:controller=>"publish", :action=>"create"}
но в идеале я бы предпочел использовать вложенную декларацию (для удобочитаемости) - если это возможно; который я начинаю думать, что это не так.