ActiveSupport::Concern
以前書いたモジュールの特異メソッドをincludeして使うと同じことが、ActiveSupport::Concernを使うことでもうちょっと綺麗に書ける。
module A extend ActiveSupport::Concern included do # Aがincludeされた際に、includeしたクラスのコンテキストで実行される end module InstanceMethods def instance_method_of_a p "instance_method_of_a" end end module ClassMethods def class_method_of_a p "class_method_of_a" end end end
class B include A end
こんなモジュールをとあるクラスBでincludeすることで、
- InstansMethods以下に定義されたメソッドがincludeによってインスタンスメソッドとして追加
- ClassMethods以下に定義されたメソッドがextendによってクラスメソッドとして追加
される。
モジュールをincludeすることによって追加されるクラスメソッド、インスタンスメソッドが明確になるので嬉しい。
ただそれだけだとちょっとメリットが弱い気がしなくもない。きっとincludedや、今回触れなかったextendedあたりが活躍するんだろう。