从Rails应用程序到Rails Engine gem的移动路径

问题描述 投票:0回答:1

我正在一个项目中,我有一个Rails应用程序(rails 4.2.5),其中包含一个gem,这是一个Rails Engine。我目前正在将路线定义从主应用程序移动到gem。我有一个执行其中一条路线的控制器测试。将路线定义移至gem时,测试失败,但是路线看起来相同。

我的宝石称为CallCenter,其中包括一个名为call_center_controller的控制器(其动作为reports_tab)。这是在Rails应用中的route.rb外观:

...
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

此时,控制器测试运行无误。但是,当我将路线定义移至gem中的routes.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

这与在主应用程序中定义的耙路径报告的路径相同,但是现在我的测试失败,并显示以下消息:

     Failure/Error: get :reports_tab

     ActionController::UrlGenerationError:
       No route matches {:action=>"reports_tab", :controller=>"call_center/call_center"}

据我所知,路由已定义,并且看起来与之前在主应用程序的路由文件中的样子完全相同。我想念什么?

ruby-on-rails ruby rails-engines
1个回答
0
投票

我找到了答案-我需要将其添加到我的控制器规格中,以告诉它查看引擎提供的路由:

routes { CallCenter::Engine.routes }
© www.soinside.com 2019 - 2024. All rights reserved.