Я работаю над проектом, в котором у меня есть приложение Rails (rails 4.2.5), которое включает в себя гем, который является Rails Engine. В настоящее время я работаю над перемещением определений маршрутов из основного приложения в гем. У меня есть тест контроллера, который выполняет один из маршрутов. Тест не пройден, когда я перемещаю определение маршрута к гему, но маршрут выглядит так же.
Мой гем называется CallCenter и включает в себя контроллер с именем call_center_controller (с действием, называемым reports_tab). Вот как route.rb выглядит в приложении Rails:
...
mount CallCenter::Engine, at: "/call_center", as: 'call_center_urls'
get '/call_center/reports_tab' => 'call_center/call_center#reports_tab'
...
Вот так я запускаю рейковые маршруты:
❯❯❯ rake routes | grep reports_tab
call_center_reports_tab GET /call_center/reports_tab(.:format) call_center/call_center#reports_tab
На этом этапе тест контроллера выполняется без ошибок. Но когда я перемещаю определение маршрута в файл route.rb в геме:
get 'call_center/reports_tab' => 'call_center#reports_tab'
(обратите внимание, что теперь маршрут указывает на 'call_center # reports_tab' вместо 'call_center / call_center # reports_tab', потому что основное приложение монтирует движок в / call_center)
Вот мой вывод из маршрутов граблей (все еще работает из каталога основного приложения)
❯❯❯ rake routes | grep reports_tab
call_center_reports_tab GET /call_center/reports_tab(.:format) call_center/call_center#reports_tab
Это идентично маршруту, сообщенному Rake Routes, когда он был определен в основном приложении, но теперь мой тест не проходит со следующим сообщением:
Failure/Error: get :reports_tab
ActionController::UrlGenerationError:
No route matches {:action=>"reports_tab", :controller=>"call_center/call_center"}
Насколько я могу судить, маршрут определен и выглядит точно так же, как и раньше когда это было в файле маршрутов для основного приложения. Чего мне не хватает?