如何在模块中调整方法调用的范围

时间:2015-05-13 12:12:05

标签: ruby-on-rails ruby activesupport-concern

  • 我想定义一个方法封装模块。
  • 它与不同模块中的方法同名。
  • 在调用我想要的那个时,调用另一个先混合的那个。

代码:

class User
  include ModuleA
  include ModuleB
end

module ModuleA
  extend ActiveSupport::Concern

  included do
    def hi
    end
  end
end

module ModuleB
  extend ActiveSupport::Concern

  def hi(param)
  end

  def say_hi
    hi(param)
  end  
end

的错误
ArgumentError: wrong number of arguments (1 for 0)
# ./app/models/concerns/modulea.rb:16:in `hi'

Rails 4

1 个答案:

答案 0 :(得分:3)

正确的答案是删除两个模块中包含的内容。 在没有包含块的情况下,将很好地包含实例方法。正如@Sergio Tulentsev所建议的

class User
  include ModuleA
  include ModuleB
end

module ModuleA
  extend ActiveSupport::Concern

  def hi
  end
end

module ModuleB
  extend ActiveSupport::Concern

  def hi(param)
  end

  def say_hi
    hi(param)
  end
end