ActiveSupport::Concern
Rails applicationでmoduleを拡張してconcernsを簡単につくれるようにするもの
ActiveSupport::Concernがないとき
code:ruby
module M
def self.included(base)
# moduleはクラスメソッドを追加できないのでフックメソッド内でextendする必要がある
base.extend ClassMethods
# includeしたクラスのコンテキストで実行したいものはclass_evalが必要
base.class_eval do
scope :foo, -> { ... }
end
end
module ClassMethods
# ...
end
end
あるとき
code:ruby
module M
extend ActiveSupport::Concern
included do
scope :foo, -> { ... }
end
class_methods do
# ...
end
end
module同士の依存関係を解決してくれる
includeしたいmodule A, Bの間に依存関係があると読み込み順によっては動かないことがありえる
参考
Concerns about Concerns