2013-05-01 46 views
1

主要應用程序基本上是一個用於多個引擎的容器。其中一個主要引擎是「儀表板」應用程序,它將提供各種其他引擎的統計數據,報告等。在儀表板中的其他引擎呈現部分內容時,我無法訪問原始引擎的路由。Rails引擎部分在另一個引擎中不能訪問原始引擎的路由

使用測試發動機爲例,我把它和儀表板安裝在發動機上作爲我的主要應用程序的route.rb文件如下:

mount Test::Engine, :at => "/test", :as => "test" 
mount Dashboard::Engine, :at => "/dashboard", :as => "dashboard" 

在我的測試引擎我有一個部分,一個小部件我想在儀表板上使用。在儀表板的看法,我有:

<%= render :partial => "test/dashboard/test" %> 

小部件的部分代碼顯示了罰款,是非常基本的:

<h3>Test</h3> 

但是如果我添加的東西試圖訪問測試的途徑之一,例如:

<%= link_to "Root", test.root_path %> 

我收到以下錯誤,指出測試是零:

未定義的方法「root_path」的零:NilClass

如果我從部件到儀表板的看法了移動的link_to,它工作正常。如果我從小部件中的link_to中刪除「測試」,將其視爲引擎中的常規命名路線,它將鏈接到儀表板引擎的根路徑;不是測試引擎的。

有關如何防止此問題並訪問在Dashboard視圖中呈現的小部件中的Test引擎路由的任何想法?我想試着保持每個引擎的小部件模塊化幷包含在引擎中,這樣,如果主應用程序決定不使用引擎,儀表板不必擔心太多的無關代碼。

回答

2

經過大量的摸索,我最終發現部分名稱與引擎在主應用程序中的映射名稱不同。通過將部分重命名爲_test_widget.html.erb,NilClass錯誤消失,因爲名稱中沒有衝突。

+1

現在的問題是......爲什麼? – mathieugagne 2013-05-07 20:58:46