require 'active_record' module Test1 def hoge "hoge1" end end module Test2 def hoge "hoge2" end end module Test3 extend ActiveSupport::Concern module ClassMethods def hoge3 "hoge3" end end end class Test extend Test1 extend Test2 # 後ろで定義されたモジュールが使われる include Test3 end pp Test.hoge # => "hoge2" pp Test.method(:hoge).source_location # ["test.rb", 8] pp Test.hoge3
................
require 'active_record' module M1 extend ActiveSupport::Concern def config(key:) # この変数は include したクラスで参照可能 @key = key end def instance_test1 "instance_test" end module ClassMethods def class_test1 "class_test1" end end end module M2 def class_test2 "class_test2" end end class Test include M1 extend M2 end pp Test.new.instance_test1 # "instance_test" pp Test.class_test1 # "class_test" pp Test.class_test2 # "class_test"