56

我有一组我经常使用的 rails 视图助手,并且想将它们打包成一个 gem,这样我就可以在我的 Gemfile 中放一行,并让助手可以从我的视图中访问。

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

我将不胜感激有关如何为 Rails 3 执行此操作的最新教程的任何指针或链接

谢谢

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

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

4

3 回答 3

94

在我看来,完整的引擎对于这项任务来说太过分了。相反,您可以创建一个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
      ActiveSupport.on_load(:action_view) { include MyGem::ViewHelpers }
    end
  end
end

# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails)
于 2011-04-26T19:52:32.663 回答
5

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

# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails::Railtie)
于 2012-06-27T16:00:21.120 回答
3

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

于 2011-04-26T19:41:22.667 回答