【发布时间】:2012-07-03 12:11:31
【问题描述】:
我最近问了一些关于这个问题的问题,我正在到达我需要去的地方,但在我的最后一个问题中可能不够具体,无法一直到达那里。因此,我正在尝试构建一个结构,用于根据应用数据计算一些指标,该结构应该是灵活的,可以轻松(安全地)添加其他指标,并且在我的观点中使用起来也相对简单。
总体目标是我将能够拥有一个自定义助手,在我看来允许以下内容:
calculate_metric(@metrics.where(:name => 'profit'),@customer,@start_date,@end_date)
这应该是不言自明的 - 该名称可以替换为任何可用的指标名称,并且可以在任何给定时间段内为任何客户或客户组执行计算。
出现复杂性的地方在于如何存储计算指标的公式 - 我在下面展示了我为此而汇总的当前结构:
您会注意到关键模型是度量、操作、操作类型和操作数。当公式非常简单时,这种结构可以正常工作,比如利润 - 一个只有两个操作数,@customer.sales.selling_price.sum 和 @customer.sales.cost_price.sum,其中一个类型是减法运算。由于我们不需要存储任何中间值,register_target 将是 1,return_register 也是。
我认为我不需要写出一个完整的例子来说明它在哪里变得更复杂,但我只想说我是否想计算在两个日期之间开户的客户拥有电子邮件地址的客户百分比(但不一定要购买),这将变得更加复杂,因为辅助函数需要知道如何处理日期变化。
因此,这种结构似乎过于复杂,除了简单的公式外,很难用于其他任何事情 - 任何人都可以提出解决这个问题的更好方法吗?
编辑:根据 Railsdog 的回答,我对我的模型进行了一些细微的更改,并重新上传了图表以清楚起见。从本质上讲,我确保了reporting_category 模型可以用来向用户隐藏中间操作数,并且可以在用户计算中使用的操作数可以以分类格式呈现。我现在需要的只是有人帮助我修改我的结构,以允许操作以 实际操作数或以前操作的结果以 rails-esqe 方式使用。
感谢您迄今为止的所有帮助!
【问题讨论】:
-
我已将 Railsdog 的 cmets 标记为答案,因为它有助于达到正确的水平,我将提出一个单独的问题,关于允许操作使用实际操作数或先前操作的结果。
标签: ruby-on-rails database ruby-on-rails-3 ruby-on-rails-3.1 model