我试图扩展gem的InstanceMethods(Globalize)
module Globalize
module ActiveRecord
module InstanceMethods
def foo
puts "Bar!"
end
end
end
end
但是,这会覆盖Globalize的现有实例方法。
为先前声明的模块提供其他实例方法的正确方法是什么?
更新: 试图要求它们似乎也不起作用:
module Globalize
require 'globalize'
module ActiveRecord
require 'globalize/active_record'
module InstanceMethods
require 'globalize/active_record/instance_methods'
def foo
puts "Bar!"
end
end
end
end
更新:通过使用roxxypoxxy提供的答案,我可以通过将他的答案添加到初始化程序来扩展实例方法
答案 0 :(得分:2)
你可以做到
Globalize::ActiveRecord::InstanceMethods.class_eval do
# patch methods
end
答案 1 :(得分:1)
您可能只需确保在进行monkeypatching之前需要该模块;如果它依赖自动加载器加载这些文件,那么定义它们将阻止自动加载器尝试要求它们。 Globalize确实依赖于自动加载器,seen here。
要修复它,请在修补之前明确要求这些模块:
require 'globalize'
require 'globalize/active_record'
require 'globalize/active_record/instance_methods'
# Patch your stuff here.