主应用程序和已安装的rails引擎中的动态导航链接

时间:2014-06-15 07:03:02

标签: ruby-on-rails ruby ruby-on-rails-4 rails-engines

我正在开发一个使用rails引擎的项目,它的视图将在主应用程序布局中使用。我的主要应用程序布局由导航链接组成,有点像面包屑,它为用户提供了他们如何到达特定页面的上下文。

所以我的问题是:如果我访问已安装引擎的视图,该引擎呈现主应用程序布局内的视图。如何使导航链接成为主要应用程序的一部分动态?

代码示例

module Engine
 class ApplicationController < ::ApplicationController

 end
end

Engines应用程序控制器使用主应用程序控制器,这意味着主应用程序布局将用于呈现操作视图。

主应用程序应用程序布局(使用haml)

%html.no-js
 %head
  %title Main App
  %body                                                                
   .body-content
     %main
    = yield :navigation
      .main-content
        = yield
      = site_footer

如果你注意到我的应用程序布局,我有收益:导航。只要有content_for方法用于定义它,就会呈现它。例如:假设我们正在从我的主应用程序控制器呈现索引操作,haml看起来像这样

index.html.haml

- content_for :navigation do
   %a.active{href: root_path}
   %a{href: some_path}
end

%h1 Index page.

所以我的主要问题是,如果我渲染我的引擎控制器动作视图,引擎不知道如何为主应用程序构建导航链接。有什么方法可以让主应用程序定义这个并让引擎以某种方式呈现导航链接。

1 个答案:

答案 0 :(得分:0)

尝试在链接中使用main_app帮助器。

2

总是会引用你的主要应用程序root。同样

%a.active{href: main_app.root_path}

将始终引用引擎根目录。

或如下面的链接中所述

  

如果您希望以类似的方式引用引擎内的应用程序,请使用main_app帮助程序:

     

%a.active{href: my_engine.root_path}

     

如果您要在引擎内使用它,它将始终转到&gt;应用程序的根目录。如果你要离开main_app&#34;路由代理&#34; &gt;方法调用,它可能会转到引擎或应用程序&gt;根目录,具体取决于它的调用位置。

有关前瞻信息,请参阅:

http://guides.rubyonrails.org/engines.html#routes

/ rpkn