Разница между include и extend при работе с модулями в Ruby заключается в том, как эти методы влияют на методы класса. 15
Include используется для добавления методов экземпляра модуля к целевому классу. 1 Любой объект, созданный на основе этого класса, будет иметь доступ к методам модуля. 1 Если создать подкласс на основе родительского класса, который включил модуль, то подкласс также получит доступ к методам модуля. 1
Extend используется для добавления методов модуля как методов класса к целевому объекту. 1 Методы становятся частью одноэлементного класса объекта. 1 При использовании extend методы модуля не доступны для экземпляров класса, а только для самого класса или расширенного объекта. 1
Таким образом, include подходит для добавления функционала к объектам класса, а extend — для расширения класса дополнительными методами. 13