【问题标题】:Moving route from Rails Application to Rails Engine gem从 Rails 应用程序到 Rails 引擎 gem 的移动路线
【发布时间】: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


    【解决方案1】:

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

    routes { CallCenter::Engine.routes }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多