我有一个看起来像这样的文件
module Devise
module Mailers
module Helpers
def initialize_from_record(record)
record = hack_record(record)
@scope_name = Devise::Mapping.find_scope!(record)
@resource = instance_variable_set("@#{devise_mapping.name}", record)
end
protected
# monkey patch :D
def hack_record(record)
record.kind_of?(Hash) ? kmodel(record).where(:email=>record.first[1]['email']).first : record
end
def kmodel(record)
record.first[0].camelize.constantize
end
end
end
end
它显然重新打开了一个Devise模块。如果我把它放在初始化器中,一切都很棒。但是,如果我把它放在lib / devise / mailers中,它会被读取但是它找不到Devise gem中定义的模块中的其他方法。那是为什么?
答案 0 :(得分:0)
这是因为它在Devise之前加载了你的 Devise模块。它们的名称相同,并且位于相同的位置(至少根据负载路径)。
如果你想在这个模块上定义新方法,那么如何完全定义一个不同的模块并将其包含在Devise中呢?
<强> LIB /色器件/邮寄者/ helpers_extensions.rb 强>
module Devise
module Mailers
module HelpersExtensions
# your code
end
end
end
Devise::Mailers::Helpers.send :include, Devise::Mailers::HelpersExtensions