Я не уверен, действительно ли я понимаю ваши классы, но вы не могли бы создать модуль Logic
или (я бы предпочел сделать это:) PhaseLogic
и EvaluationLogic
объекты в /lib
каталоге ?
Не сказано, что «Модель» всегда является потомком ActiveRecord. Если объект относится к «бизнес-логике», то это модель. У вас могут быть модели, которые никак не касаются базы данных. Поэтому, если ваши классы являются «бизнес-объектами», поместите их в «app / models» и используйте как любую другую модель.
Другой вопрос заключается в том, следует ли использовать наследование или модули - но я бы предпочел включить модуль в PhaseLogic
, а не определять PhaseLogic
в модуле. Конечно, все это сильно зависит от предполагаемой роли ваших объектов.
Поскольку в Ruby класс объекта не важен, вам не нужно использовать наследование. Если вы хотите «вставить» логические объекты в другие объекты, просто позаботьтесь о том, чтобы у всех классов «* Logic» были необходимые методы. Я знаю, что все, что я сказал, очень расплывчато, но я думаю, что не могу дать вам более конкретных предложений, не зная больше о роли этих объектов.
Ах, и еще одна вещь!
Если вы столкнулись с автозагрузкой классов Rails, просто используйте старый require "lib/logic.rb"
во всех классах, где вы используете Logic::PHASE_INITIAL
константы.
В этом случае я полагаю, что ваша проблема была вызвана другим порядком загрузки. logic/evaluation_logic.rb
был загружен до logic/phase_logic.rb
. Проблема может исчезнуть, если вы создадите logic.rb
где-нибудь, где автозагрузка класса сможет найти его, и определите эти константы в этом файле.