2013-05-01 45 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