从另一个共享的同一个类中调用一个模块方法

时间:2013-07-10 13:24:36

标签: ruby-on-rails ruby

我有这堂课:

class SpecialAwesome
  module Controller
    def builder
      SpecialAwesome.with_member(current_member)

未能说:

NoMethodError: undefined method `with_member'

但后来我在这里看到了这个方法:

class SpecialAwesome
  module Options
    def with_member member
      self.class.new options.merge(:member => member)
    end

为什么其他文件无法识别此方法?

2 个答案:

答案 0 :(得分:2)

with_member方法被定义为SpecialAwesome::Options上的实例方法,而不是SpecialAwesome的类方法。可能这是一个问题。

答案 1 :(得分:1)

with_member不是SpecialAwesome类方法,但它在Options模块中定义。为了使其按预期工作,您可以使用extend方法:

class SpecialAwesome
  module Options
    # ...
  end
  extend Options
  # ...
end

Options模块中定义的方法添加为SpecialAwesome类方法。