0
  • 我想定义一个方法封装模块。
  • 它与不同模块中的方法具有相同的名称。
  • 当调用我想要的那个时,它会调用第一个混入的另一个。

代码 :

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'

导轨 4

4

1 回答 1

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
于 2015-05-13T12:20:06.290 回答