Давайте рассмотрим пример, который вы сначала связали.
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
module InstanceMethods
def tags()
# ...
end
end
end
Когда вы включаете TagLib в свой класс, AS Concern автоматически расширяет класс с помощью модуля ClassMethods и включает модуль InstanceMethods.
class Foo
include TagLib
# is roughly the same as
include TagLib::InstanceMethods
extend TagLib::ClassMethods
end
Но, как вы могли заметить, мы уже включили сам модуль TagLib, поэтому определенные в нем методы уже доступны как методы экземпляра класса.Почему вы хотите иметь отдельный модуль InstanceMethods?
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
def tags()
# ...
end
end
class Foo
include TagLib
# does only `extend TagLib::ClassMethods` for you
end