主要应用程序基本上是多个引擎的容器。主要引擎之一是“仪表板”应用程序,它将提供来自各种其他引擎的统计数据、报告等。从仪表板中的其他引擎渲染部分时,我无法访问原始引擎的路线。
以测试引擎为例,我将它和仪表板引擎安装在我的主应用程序的 route.rb 文件中,如下所示:
mount Test::Engine, :at => "/test", :as => "test"
mount Dashboard::Engine, :at => "/dashboard", :as => "dashboard"
在我的测试引擎中,我有一个要在仪表板上使用的部分小部件。在仪表板的视图中,我有:
<%= render :partial => "test/dashboard/test" %>
小部件部分代码显示良好并且非常基本:
<h3>Test</h3>
但是,如果我添加一些东西试图访问 Test 的路线之一,例如:
<%= link_to "Root", test.root_path %>
我收到以下错误,说测试为零:
nil:NilClass 的未定义方法“root_path”
如果我将 link_to 从小部件移到仪表板的视图中,它可以正常工作。如果我从小部件中的 link_to 中删除“测试”以将其视为引擎中的常规命名路由,它将链接到仪表板引擎的根路径;不是测试引擎的。
关于如何防止这种情况并访问在仪表板视图中呈现的小部件中的测试引擎路由的任何想法?我想尝试保持每个引擎的小部件模块化并包含在引擎中,这样如果主应用程序决定不使用引擎,仪表板就不必担心太多无关代码。