【发布时间】:2020-04-26 01:09:10
【问题描述】:
我正在做一个项目,我有一个 Rails 应用程序(rails 4.2.5),它包含一个 gem,它是一个 Rails 引擎。我目前正在将路由定义从主应用程序移动到 gem。我有一个控制器测试来练习其中一条路线。当我将路由定义移至 gem 时测试失败,但路由看起来相同。
我的 gem 叫做 CallCenter,它包括一个叫做 call_center_controller 的控制器(带有一个叫做 reports_tab 的动作)。这是 routes.rb 在 Rails 应用程序中的样子:
...
mount CallCenter::Engine, at: "/call_center", as: 'call_center_urls'
get '/call_center/reports_tab' => 'call_center/call_center#reports_tab'
...
这就是我运行 rake 路线的原因:
❯❯❯ 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 路由输出,(仍在主应用的目录中运行)
❯❯❯ 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"}
据我所知,路由已定义,并且看起来与之前在主应用程序的路由文件中时完全相同。我错过了什么?
【问题讨论】:
标签: ruby-on-rails ruby rails-engines