2
Module Baz
   def foo
     super
     :baz
   end
end


Class A
   prepend Baz

   def foo
     :bar
   end
end

A.new.foo //works fine

现在如果我将我的模块转换为关注模块,它不是......

module BazConcern
  extend ActiveSupport::Concern

  included do    
    def foo
      super
      :baz
    end
  end
end

那么我们如何使用 prepend 和 ActiveSupport::Concern 呢?红宝石 2+

4

2 回答 2

3

prependActiveSupport::Concern(Rails 6.1+)

Rails 6.1 增加了对prependwith的支持ActiveSupport::Concern

请看下面的例子:

module Imposter
  extend ActiveSupport::Concern

  # Same as `included`, except only run when prepended.
  prepended do
    
  end
end

class Person
  prepend Imposter
end

还值得一提的concerning是也更新了:

class Person
  concerning :Imposter, prepend: true do

  end
end

资料来源:

于 2020-11-16T21:28:43.970 回答
1

看起来这里有一个ActiveSupport::Concern支持前置的版本:https ://gist.github.com/bcardarella/5735987 。

我还没有尝试过,但有一天我可能会。

(链接自https://groups.google.com/forum/#!topic/rubyonrails-core/sSk9IEW74Ro

于 2018-08-22T05:27:22.807 回答