1

该项目:

我正在创建一个动态报告系统。

指标定义了报告数据的目的。例如:

13起房屋火灾。”

管理员将通过一个表格将“房屋火灾”定义为一个指标,记者将通过不同的表格简单地添加“13”。

但是,还有另一个层次:我希望报告在连接的数据点上是详细的:

1 月份发生13起房屋火灾,影响42个人(或16个家庭)”

动词存储在“metrics”表中,数据存储在“metrics_data”表中

这是上面示例中的指标表:

metric_id | parentID | childID | prefix       | suffix      | program_id
    1     |     1    |   1     |              | house fires |    1
    2     |     1    |   2     | during       |             |    1
    3     |     1    |   3     | affecting    | individuals |    1
    4     |     1    |   4     | (or          | families    |    1

基于句子的组织的关键是 parentID - childID 关系。

这是 metrics_data 表:

metric_id | value |     date
    1     |  13   |   01/01/12
    2     |  nil  |   01/01/12
    3     |  42   |   01/01/12
    4     |  16   |   01/01/12

目标:

我想组织视图(通过 parentID 循环)以详细显示指标:

程序#1

(parentID: 1): " #房屋火灾在(日期)期间影响#个个人(或#个家庭)"

(parentID:2):“ (日期)期间的#个避难所提供#个过夜(对于#个个人)”

程序#2

(parentID: 1): " # (date)期间招募的新志愿者"

(parentID: 2): " #志愿者在(日期)期间服务#小时"

编码:

class Program < ActiveRecord::Base
  has_many :programs_metrics
  has_many :metrics, through: :programs_metrics
end

class Metric < ActiveRecord::Base
  has_many :programs_metrics
  has_many :metrics, through: :programs_metrics
end

部分 _program.html.erb(用于程序/index.html.erb):

<% program.metrics.each do |metrics| %>
  <div class="row offset1">
   <% program.metrics.each do |pid| %> #how do I loop here based on parentID, sorted by childID?
     <%= pid.prefix %>
     #
     <%= pid.suffix %>
    <% end %>
  </div>
<% end %>

我知道我可以将其拆分为一个单独的表并定义两个表之间的 parentID 和 childID 之间的关系,但是添加另一个关系层似乎过于复杂。

4

1 回答 1

1

您可能应该将“父”和“子”元素视为 Metrics 的属性,而不是尝试重用相同的模型。另一种方法是创建另一个称为“事件”或其他模型的模型,这些事件与程序相关,而度量与事件相关。我可能还会创建一个“度量类型”,而不是让每个记录直接关联一个前缀或后缀。

我认为尝试将所有度量标准放在同一级别,并尝试使用 parentID 和 childID 循环它们以创建一个句子,这比仅在关系中添加另一层要复杂得多。

希望这足以推动......

于 2013-01-08T15:02:10.187 回答