Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Rails视图助手提取到gem中?_Ruby On Rails_Ruby On Rails 3_Rubygems_Gem_Actionview - Fatal编程技术网

Ruby on rails 如何将Rails视图助手提取到gem中?

Ruby on rails 如何将Rails视图助手提取到gem中?,ruby-on-rails,ruby-on-rails-3,rubygems,gem,actionview,Ruby On Rails,Ruby On Rails 3,Rubygems,Gem,Actionview,我有一组我经常使用的rails视图帮助程序,并且希望将它们打包成一个gem,这样我就可以在gem文件中放一行,并从我的视图访问这些帮助程序 在使用Bundler和Jeweler之前,我已经创建了gems,但是,我并不完全清楚如何在gem中组织Rails视图帮助程序,并将它们包含到Rails中 如果有任何关于如何为Rails3实现这一点的最新教程的提示或链接,我将不胜感激 谢谢 只是想澄清一下:问题不在于“如何创造宝石”。它是“如何在gem中打包视图帮助程序,以便我可以在Rails中使用它们” 编

我有一组我经常使用的rails视图帮助程序,并且希望将它们打包成一个gem,这样我就可以在gem文件中放一行,并从我的视图访问这些帮助程序

在使用Bundler和Jeweler之前,我已经创建了gems,但是,我并不完全清楚如何在gem中组织Rails视图帮助程序,并将它们包含到Rails中

如果有任何关于如何为Rails3实现这一点的最新教程的提示或链接,我将不胜感激

谢谢

只是想澄清一下:问题不在于“如何创造宝石”。它是“如何在gem中打包视图帮助程序,以便我可以在Rails中使用它们”

编辑2:
我也同意下面的海报。。rails引擎对于这种(希望是简单的)需求来说太过苛刻了

您可能正在寻找的是一个。引擎是一个包含rails应用程序片段的gem(事实上,rails应用程序本身就是一个引擎)。

在我看来,对于这项任务来说,一个完整的应用程序是过分的。相反,您可以创建一个在初始化时将助手包含到ActionView::Base中的

# lib/my_gem/view_helpers.rb
module MyGem
  module ViewHelpers
    def pre(text)
      content_tag :pre, text
    end

    def another_helper
      # super secret stuff
    end
  end
end

# lib/my_gem/railtie.rb
require 'my_gem/view_helpers'
module MyGem
  class Railtie < Rails::Railtie
    initializer "my_gem.view_helpers" do
      ActiveSupport.on_load(:action_view) { include MyGem::ViewHelpers }
    end
  end
end

# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails)
#lib/my_gem/view_helpers.rb
模块MyGem
模块查看帮助程序
def pre(文本)
内容标签:前置,文本
结束
def另一个_助手
#超级秘密的东西
结束
结束
结束
#lib/my_gem/railtie.rb
需要“我的宝石/查看工具”
模块MyGem
类Railtie
另外,如果您希望仅包含Rails3版本的帮助程序,则可以使用

# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails::Railtie)

谢谢,我要试试这个。。威尔回电嗨,我想知道:为什么它命名为“Railtie”,Railtie是什么意思?@为什么,我不确定,但我认为这是因为它是一个类,有必要将代码“绑定”到“Rails”中。@为什么“Railties”是火车轨道固定的木板条,也就是说,将它们“绑定”在一起。在RoR中命名一个与“rails”主题一致的类似构造只是一种巧妙的方式。@BrandonTilley如果我能提供一个建议,那就是利用内置的load hook功能,而不是在
ActionView::Base
上调用私有方法
include
。自年以来,Rails提供了惰性负载挂钩作为ActiveSupport的一部分。因此,初始化程序块的备用代码看起来像
ActiveSupport.on_load(:action_view){include MyGem::ViewHelpers}