我正在开发一个可以进行一些常规字符串操作的gem,我希望将其作为帮助方法暴露给rails 4+应用程序。
并非我宝石的所有消费者都是rails应用程序,所以我想安全地将帮助方法暴露给rails应用程序。
两个问题:
由于
答案 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 question和this 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
或任何所需控制器的文档中。