基于表值的ruby迭代

时间:2012-12-28 21:04:44

标签: ruby-on-rails ruby-on-rails-3

项目:

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

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

13 烧房子。”

管理员会通过一个表单将“房屋火灾”定义为一个指标,记者只需通过另一种形式添加“13”。

然而,还有另一个层面:我希望报告在连接的数据点之间冗长:

13 1月影响 42 个人(或 16 家庭)期间发生火灾/强>

verbage存储在表“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):“(日期)期间招募的新志愿者

(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

Partial _program.html.erb(对于programs / 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之间的关系,但是添加另一个关系层似乎过于复杂。

1 个答案:

答案 0 :(得分:1)

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

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

希望这足以推动...