Перемещение маршрута из приложения Rails в гем Rails Engine - PullRequest
0 голосов
/ 26 апреля 2020

Я работаю над проектом, в котором у меня есть приложение 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"}

Насколько я могу судить, маршрут определен и выглядит точно так же, как и раньше когда это было в файле маршрутов для основного приложения. Чего мне не хватает?

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел ответ - мне нужно было добавить это в мой контроллер spe c, чтобы сказать ему, чтобы посмотреть маршруты, предоставляемые Engine:

routes { CallCenter::Engine.routes }
...