如何将可选的Rails视图助手添加到我的gem?

时间:2014-12-12 02:00:13

标签: ruby-on-rails ruby gem actionview view-helpers

我正在开发一个可以进行一些常规字符串操作的gem,我希望将其作为帮助方法暴露给rails 4+应用程序。

并非我宝石的所有消费者都是rails应用程序,所以我想安全地将帮助方法暴露给rails应用程序。

两个问题:

  1. 如何从gem向Rails添加视图助手方法以及它应该存在于gem目录结构中?
  2. 如果消费者不是铁杆应用程序,我该怎么做才能防止爆炸?即宝石在包含时无法找到栏杆
  3. 由于

2 个答案:

答案 0 :(得分:3)

lib/my_gem.rb中,您通常希望按照以下方式执行某些操作:

require 'my_gem/action_methods' if defined? ActionView

如果你的方法需要Rails / ActionView,那么lib/my_gem/action_view_methods.rb将包含所有。

您可以使用以下命令将这些帮助器添加到Rails:

module ActionMethods
  # ...
end

ActionView::Base.send :include, ActionMethods

另请参阅this questionthis one

答案 1 :(得分:0)

rails方式是创建一个engine,当它加载你的gem时它会被rails处理

module MyGem
  class Engine < ::Rails::Engine
    isolate_namespace MyGem

    initializer "my_gem.include_view_helpers" do |app|
      ActiveSupport.on_load :action_view do
        include MyViewHelper
      end
    end
  end
end

您可以采用的另一种方法是默认不包含帮助程序,以便消费者不会从您的宝石中获得意外的副作用。创建帮助程序作为模块并将其添加到ApplicationController或任何所需控制器的文档中。