В Ruby, поскольку вы можете включить несколько микшинов, но только расширить один класс, кажется, что mixins будут предпочтительнее над наследованием.
Мой вопрос: если вы пишете код, который должен быть расширен/включен, чтобы быть полезным, почему бы вам сделать его классом? Или по-другому, почему бы вам не сделать это модулем?
Я могу думать только об одной причине, по которой вам нужен класс, и если вам нужно создать экземпляр класса. Однако в случае ActiveRecord:: Base вы никогда не создаете экземпляр непосредственно. Так не должен ли он быть модулем?