Ruby on rails RubyonRails:如何将自定义插件的链接添加到我的应用程序&x27;s导航?
我正在尝试从我制作的插件中添加导航链接,而不改变主应用程序文件。例如,假设我有: app/views/shared/_navigation.html.erbRuby 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=
<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>