我有一个ruby脚本lib/tasks/material_parser_helper.rb
和模块lib/common_parser_methods.rb
我怎样才能将所有模块方法扩展到'material_parser_helper.rb'
因此,我可以在 MaterialParserHelper
的任何方法中调用clean_key
如果我在课后尝试扩展CommonParserMethods ,
我会收到错误NameError: uninitialized constant SummaryProjection::CommonMethods
class MaterialParserHelper
extend CommonParserMethods
def test
clean_key("jckdj")
end
end
module CommonParserMethods
def clean_key(key)
return key.strip.squish.gsub(/\s/, '_').gsub('-', '_').downcase
end
end
config.autoload_paths += %W(#{config.root}/lib/ #{config.root}/lib/common_parser_methods.rb #{config.root}/lib/tasks)
答案 0 :(得分:2)
您希望包含 CommonParserMethods,而不是扩展您的课程。这将为MaterialParserHelper提供CommonParserMethods中定义的方法。
有关include vs. extend here的更多信息:What is the difference between include and extend in Ruby?
也就是说,您的错误消息引用了一些未显示的代码;一个名为SummaryProjection
的类。你确定MaterialParserMethods类导致了这个问题吗?