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

时间:2011-04-26 13:39:45

标签: ruby-on-rails ruby-on-rails-3 rubygems gem actionview

我有一组经常使用的rails视图助手,并希望将它们打包成一个gem,这样我就可以在我的Gemfile中添加一行,并从我的视图中访问帮助器。

我在使用Bundler和Jeweler之前创建了宝石,但是,我并不清楚如何在gem中组织Rails视图助手,并将它们包含在rails中。

我很感激任何指针,或者链接到有关如何为Rails 3执行此操作的最新教程

由于

只是澄清:问题不在于“如何创造宝石”。它的“如何在gem中打包视图助手,所以我可以在Rails中使用它们”

编辑2: 我也同意下面的海报..轨道引擎对于这种(希望简单的)要求来说太过分了

3 个答案:

答案 0 :(得分:89)

在我看来,完整Engine对于此任务来说是过度的。你可以在初始化时创建一个Railtie,其中包括你的助手到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
      ActionView::Base.send :include, ViewHelpers
    end
  end
end

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

答案 1 :(得分:5)

此外,如果您只想为Rails3版本提供包含帮助程序,则可以使用

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

答案 2 :(得分:2)

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