Ruby on rails RubyonRails:如何将自定义插件的链接添加到我的应用程序&x27;s导航?

Ruby on rails RubyonRails:如何将自定义插件的链接添加到我的应用程序&x27;s导航?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试从我制作的插件中添加导航链接,而不改变主应用程序文件。例如,假设我有: app/views/shared/_navigation.html.erb <ul id="navigation"> <li><a href="#">Nav link A</a></li> <li><a href="#">Nav link B</a></li> <li><a href=

我正在尝试从我制作的插件中添加导航链接,而不改变主应用程序文件。例如,假设我有:

app/views/shared/_navigation.html.erb

<ul id="navigation">
 <li><a href="#">Nav link A</a></li>
 <li><a href="#">Nav link B</a></li>
 <li><a href="#">Nav link C</a></li>
</ul>
如果我的供应商/插件文件中有一个名为“recipes”的自定义插件,并且我想添加以下内容:

<li><a href="link_to_recipes">Recipes</a></li>
  • 对于上面提到的_navigation.html.erb文件(在“Nav link C”链接之后),我需要做什么


    我相信你可以在插件的init.rb文件中提供钩子,你也可以在install.rb文件中安装或注册新项目,但我似乎找不到关于如何让插件添加指向现有_navigation.html.erb文件的链接的信息

    我想我必须将导航文件更改为如下内容:

    <ul id="navigation">
     <li><a href="#">Nav link A</a></li>
     <li><a href="#">Nav link B</a></li>
     <li><a href="#">Nav link C</a></li>
     <div id="links_from_plugins">
       <!-- links from plugins will go here -->
     </div>
    </ul>
    
    plugin/
      - Readme
      - init.rb
      - install.rb
      - test/
        - unit and functional tests
      - lib/
        - plugin source files
      - generators/
        - any generators you want to provide 
    
    ..然后以某种方式将该插件的init.rb中的链接添加到#links_from_plugins id


    有什么想法吗?

    您需要提供更多信息。从所讨论的例子中可以看出,甚至不需要为插件而烦恼。事实上,你的问题中没有任何东西依赖于插件中的任何信息


    也就是说,你确实有一些关于插件的合理问题。插件通常的工作方式是,在模块中定义新方法和类,然后将这些模块包含在它们所属的核心Rails类中

    插件的一般结构如下所示:

    <ul id="navigation">
     <li><a href="#">Nav link A</a></li>
     <li><a href="#">Nav link B</a></li>
     <li><a href="#">Nav link C</a></li>
     <div id="links_from_plugins">
       <!-- links from plugins will go here -->
     </div>
    </ul>
    
    plugin/
      - Readme
      - init.rb
      - install.rb
      - test/
        - unit and functional tests
      - lib/
        - plugin source files
      - generators/
        - any generators you want to provide 
    
    在你的情况下,你可能做了如下的事情。在正确的插件结构下,它会放在plugin/lib/recipes.rb这样的文件中

    module Recipes
      def link_to_recipe 
        ..
      end
    end
    
    在plugins init.rb中,您需要这样做,以便将新方法添加到视图中可用的方法中:

     require 'lib/recipes.rb'
     ActionView::Base.send(:include, Recipies)
    
    Rails可以访问插件目录中的所有生成器,您应该使用init.rb(Rails自动启动时加载)加载插件库并将其挂接到核心类中。install.rb用于执行插件安装后需要执行的任何任务。它的执行是在用户使用
    script/plugin install
    安装插件后触发的。应该使用install.rb在公共目录中复制资产。你的插件所依赖的。然而,如果你使用的是引擎,那么你的插件就是一个微型Rails应用程序,你不需要复制资源


    出于好奇,您是否打算在多个项目中使用此配方模块?如果不是的话,你不应该去额外的麻烦制作一个插件。相反,代码属于相关的帮助器模块,或者RAILS_ROOT/lib,您必须以某种方式更改导航模板。需要有一句话说:“这是我希望额外的链接出现的地方。”

    外部的一种方法为生成输出的视图,依我拙见,视图始终是一个助手。因此,我将让插件定义一个
    RecipesHelper
    模块。然后,从
    init.rb
    重新打开
    ActionView::Helpers
    模块,并包括
    RecipesHelper

    最后,您的视图如下所示:

    <ul id="navigation">
     <li><a href="#">Nav link A</a></li>
     <li><a href="#">Nav link B</a></li>
     <li><a href="#">Nav link C</a></li>
     <li><%= link_to_recipes %></li>
    </ul>