我目前在我的 rails 应用程序中有一个计算结构,其中包含模型metric
和.operand
operation_type
目前metric
模型有很多operands
,可以进行基于的计算operation_type
(如求和、乘等),每个operand
都定义为右或左(即如果运算是除法,就可以识别分子和分母)。
目前,操作数始终是某个模型的属性,例如@customer.sales.selling_price.sum
.
为了使这种可扩展性,需要允许操作数是某种属性,或者是先前操作的结果,即操作数可以是度量。
我已经包含了我的模型当前外观的图表:
谁能帮助我以最优雅的方式让操作数成为实际操作数或其他指标?
谢谢!
编辑:似乎基于迄今为止唯一的答案,也许多态关联是解决这个问题的方法,但答案是如此简短,我不知道如何以这种方式使用它们 - 任何人都可以详细说明吗?
编辑2:好的,我想我到了某个地方 - 基本上我现在有一个指标,它有一个操作数,还有一个操作数有一个指标。我需要一个多态自联接,其中一个指标也可以有许多指标——我是否需要将其称为其他东西,也许是计算的_metrics,以便指标模型可以使用自己?这会让我遇到一个指标有很多操作数,而一个指标有很多计算指标的情况。
编辑 3:我已经更新了我的模型,如下所示,如果对这是否是解决问题的好方法提出任何批评,我将不胜感激。您会注意到,我添加了一个名为的模型,该模型calculated_metric
本质上是其他指标的持有者——即可以使用两个操作数或一个操作数和一个计算指标的组合来计算一个指标。
编辑 4:为任何可以向我展示详细的 rails-y 方法的人添加了赏金。
编辑 5:赏金仍在等待中;虽然下面提供的答案很详细,但我正在寻找最好的方法,而不是解决问题的替代方法(即请让我知道解决问题的最佳方法,而不是寻找回避它的方法,因为我需要这个功能)。谢谢!
编辑6:对此没有引起太多关注-增加赏金会有所帮助,还是这个问题不是跑步者?