首页 > 解决方案 > 从覆盖范围中包含的关注点调用覆盖范围

问题描述

所以基本上我有一个 MyClass 类,其中包含一个关注 MyConcern 和包含范围“foo”的问题。我希望能够覆盖 MyClass 中的范围“foo”,但仍然能够在 MyConcern 中调用覆盖的范围。

module MyConcern {
  extend ActiveSupport::Concern

  included do
    scope :foo, lambda{ |x|
      puts "Hello"
    }
  end
}

class MyClass {
  include MyConcern

  scope :foo, lambda{ |x|
    MyConcern.foo(x)
    puts " World"
  }
}

所以当我调用@myClass.foo(1)where @myClassis an instance of MyClass 时,我应该能够看到打印出来的“Hello World”。

我可以找到的一个类似线程是Calling super in overriden scope defined in concern,但不幸的是,在我的情况下,我无法使用常规类方法。

任何帮助将不胜感激!

标签: ruby-on-railsruby

解决方案


当您在 MyConcern 中使用包含时,它会在类上调用“include YourModule”之后发生。但不会改变 MyConcern 上的任何内容。如果您想拥有一个超类方法,请尝试

module MyConcern
  extend ActiveSupport::Concern
  def self.foo
    puts "Hello"
  end
end

Now you can call MyConcern.foo


推荐阅读