使用Ruby中的类方法在模块中定义的方法

时间:2014-01-24 07:53:02

标签: ruby-on-rails ruby scope helper

我有一个小问题,我无法理解。由于我想重用我的类中定义的许多方法,我决定将它们放入Helper中,我可以随时轻松地将其包含在内。基本类看起来像这样:

class MyClass
  include Helper::MyHelper
  def self.do_something input
    helper_method(input)
  end
end

这是助手:

  module Helper
    module MyHelper
      def helper_method input
        input.titleize
      end
    end
  end

现在我不能从我的班级调用“helper_method”,因为我认为这是一个范围问题?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我想这是因为self内的do_something input指针是InternshipInputFormatter,而不是InternshipInputFormatter的实例。因此,调用helper_method(input)的正确别名为self.helper_method(input),但是您将包含 Helper::MyHelper作为实例方法包含在InternshipInputFormatter类中,而不是单例,所以尝试使用模块的实例方法扩展类作为类的signelton方法:

class InternshipInputFormatter
   extend Helper::MyHelper
   def self.do_something input
      helper_method(input)
   end
end 

InternshipInputFormatter.do_something 1
# NoMethodError: undefined method `titleize' for 1:Fixnum

如您所见,该调用已停止helper_method内的执行。请参阅document,了解includeextend之间的详细差异。

相关问题