簡體   English   中英

從 Rails 應用程序到 Rails 引擎 gem 的移動路線

[英]Moving route from Rails Application to Rails Engine gem

我正在做一個項目,我有一個 Rails 應用程序(rails 4.2.5),它包含一個 gem,它是一個 Rails 引擎。 我目前正在將路由定義從主應用程序移動到 gem。 我有一個練習其中一條路線的 controller 測試。 當我將路由定義移至 gem 時測試失敗,但路由看起來相同。

我的 gem 叫做 CallCenter,包括一個名為 call_center_controller 的 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

此時 controller 測試運行沒有錯誤。 但是當我將路由定義移動到 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 路由的 output,(仍在主應用程序的目錄中運行)

❯❯❯ rake routes | grep reports_tab
               call_center_reports_tab GET   /call_center/reports_tab(.:format)         call_center/call_center#reports_tab

這與 rake 路由在主應用程序中定義時報告的路由相同,但現在我的測試失敗並顯示以下消息:

     Failure/Error: get :reports_tab

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

據我所知,路由已定義,並且看起來與之前在主應用程序的路由文件中時完全相同。 我錯過了什么?

我找到了答案 - 我需要將此添加到我的 controller 規范中,以告訴它查看引擎提供的路線:

routes { CallCenter::Engine.routes }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM