【问题标题】:How do I extract Rails view helpers into a gem?如何将 Rails 视图助手提取到 gem 中?
【发布时间】:2011-08-13 01:39:44
【问题描述】:

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

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

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

谢谢

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

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

【问题讨论】:

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


    【解决方案1】:

    在我看来,完整的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
          ActiveSupport.on_load(:action_view) { include MyGem::ViewHelpers }
        end
      end
    end
    
    # lib/my_gem.rb
    require 'my_gem/railtie' if defined?(Rails)
    

    【讨论】:

    • 谢谢,我要试试这个.. 会回报的
    • 您好,我想知道:为什么叫“Railtie”,“Railtie”是什么意思?
    • @why 好吧,我不确定,但我认为这是因为它是具有将代码“绑定”到“Rails”中所必需的钩子的类
    • @why "Railties" 是固定火车铁轨的木板条,即将它们“绑”在一起。这只是在 RoR 中为符合“rails”主题的类似结构命名的一种可爱方式。
    • @BrandonTilley 如果我可以提供一个建议,那就是利用内置的负载挂钩功能,而不是在 ActionView::Base 上调用私有方法 include。从3.0.0 开始,Rails 就提供了惰性加载钩子作为 ActiveSupport 的一部分。因此,初始化块的替代代码看起来像ActiveSupport.on_load( :action_view ){ include MyGem::ViewHelpers }
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2011-08-04
        • 2011-07-16
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多