я противостоял против выбора либо # 1:рубин как делегировать модуль функции пространства имен в пространство имен :: Base внутренний класс
class Abstract
end
class Abstract::Foo < Abstract
end
class Abstract::Bar < Abstract
end
против # 2:
module Abstract
class Base
end
class Foo < Base
end
class Bar < Base
end
end
Я в конечном итоге выбор опции # 2, так как мой Abstract
чувствовал себя как пространство имен, и я мог бы в конечном счете добавить другие вещи, как
module Abstract # Instead of class if I had used option #1
class SomeAbstractService
end
end
Однако я чувствую, что вызов Abstract::Base.some_class_method
немного странный. можно добавить делегирование функции модуля? Например, если мой Base
является модель ActiveRecord или Mongoid (так Foo и Bar, как ИППП), я хотел бы иметь возможность запрашивать сбор/таблица
Abstract.where(...)
вместо Abstract::Base.where(...)
Можно делегировать функцию модуля .where
константе/классу Base
?
Что-то вроде
module Abstract
class Base
end
delegate_module_function :where, to: :Base
end
Или есть другой/лучший способ сделать это?
этом. Модули и классы - это объекты, подобные любому другому объекту, в этом нет ничего особенного. Вы должны делегировать методы между ними точно так же, как вы делегируете методы между любыми двумя другими объектами, потому что они * являются * просто любыми другими объектами. –