2

我最近就这个主题问了几个问题,我想我正在设法缩小我需要做的事情。

我正在尝试在 Rails 应用程序中创建一些“指标”(引用,因为这些不应与与应用程序性能相关的指标混淆;这些是基于应用程序数据生成的指标);在我看来,基本上我希望能够使用类似于以下内容的东西:

@metric(@customer,'total_profit','01-01-2011','31-12-2011').result

这将给出给定客户 2011 年的总利润。

当然,我可以使用自定义方法创建度量模型result,但我对创建自定义度量(例如,total_profit、total_revenue 等)的最佳方式感到困惑,因为它们易于扩展,以便可以在每个用户的基础上添加自定义指标。

我最初的想法是尝试将每个自定义指标的公式存储在一个带有和模型的结构中operand,但这很快就变得非常混乱和冗长,并且在添加每个指标方面证明是非常困难的。operationoperation_type

我现在的想法是,也许我可以创建一个自定义指标帮助器方法来保存我的每个指标(因此我可以对每个指标进行硬编码,并将变量传递给每个方法),但这会有多大的可扩展性?这个选项看起来不太像rails-esque。

任何人都可以提出解决此问题的更好选择吗?

编辑:下面的答案是一个很好的答案,因为它使事情变得非常简单-尽管我担心它可能充满危险,因为它使用 eval (因此永远不可能使用用户代码)。是否有另一种选择来执行此操作(我之前的选项,其中操作数等被分解成块,使用了constantize和的组合get_instance_variable- 有没有办法可以使用这些来使字符串的执行更安全)?

4

1 回答 1

0

这个问题在很大程度上得到了一些讨论:Rails - Scalable computing model

对于遇到这种情况的任何人,解决方案本质上是确保一个操作始终有两个操作数,但操作数可以是属性,也可以是先前计算的结果(即它可以是度量本身),因此高度可扩展。这避免了评估任何东西的需要,从而避免了由此带来的潜在安全漏洞。

于 2012-07-10T09:26:57.197 回答