Rails - модель с самостоятельными ссылками?

В настоящее время у меня есть модель metric, которая может принимать два operands и выполнять вычисления на основе своего operation_type, получая результат с помощью пользовательского метода результатов. Это работает, как и ожидалось.

Чтобы сделать это масштабируемым, я хотел бы иметь возможность использовать два операнда (как сейчас), один операнд и одну метрику или две метрики для выполнения вычислений. Причина этого в том, что он масштабируется — я могу использовать результаты предыдущих операций.

Где я застрял, так это в том, как создать это самосоединение - я полагаю, что мне нужно каким-то образом пойти по пути полиморфной ссылки на себя, но документация не приводит меня к ответу. В настоящее время у меня есть установка с моделью calculated_metric, но я не уверен, что это правильный путь.

Мои модели выглядят следующим образом:

class Metric < ActiveRecord::Base
    attr_accessible :name, :operation_type_id
end

class Operand < ActiveRecord::Base
    attr_accessible :object, :attribute
end

class Calculated_metric < ActiveRecord::Base
    attr_accessible :metric_id, :calculated_metric_id
end

Будем очень благодарны любой помощи. Спасибо!

РЕДАКТИРОВАТЬ: Возможно, я могу немного пояснить: в настоящее время у меня есть отдельная модель calculated_metric; это лучший подход для использования результатов другой метрики в моем расчете, или я мог бы добиться этого проще, добавив left_metric и right_metric в мою существующую таблицу metric (слева и справа так, что если уравнение представляет собой вычитание например знает какой отнимается)? Я не уверен, что это идеальное решение, так как в большом количестве случаев они будут нулевыми.


person Harry    schedule 16.07.2012    source источник


Ответы (1)


Я полагаю, что, возможно, наткнулся на возможное здесь - вместо того, чтобы иметь ссылку на саму метрику, я добавил столбец metric_id в модель operand, что означает, что он может ссылаться на атрибут объекта или на другую метрику.

Я думаю, что это решение работает, хотя в модели операндов всегда будет хотя бы один нулевой столбец; как таковые, лучшие решения по-прежнему приветствуются.

Спасибо!

person Harry    schedule 16.07.2012