Rails - 呈现复杂的数据视图

时间:2012-10-02 13:38:25

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

这应该是一件简单的事情,但我已经有一天了,并且看不清楚答案。

我有三个基本模型:用户,评估和工作。用户处理作业,作业所有者评估用户。用户可以有许多不同的工作。每个工作将多次评估其相关用户(在工作中,每个相关用户将具有相同的评估 - 当然具有不同的分数。)

所以,简单地说,我想以表格形式呈现数据(有点像excel工作簿),评估名称跨越x轴,用户名沿y轴向下。

所以,它看起来像这样:

        Evaluation 1  |  Evaluation 2  |  Evaluation 3
       _______________________________________________________
User 1   Good              Poor            Outstanding
User 2   Poor              Good            Good

我可以轻松地在x或y上显示标签,但不能同时显示两者。

Q1)每个作业/用户评估都是自己的数据库记录。关于如何在x轴和y轴上构造LABELS的任何建议?

Q2)我如何确保数据(例如,用户2评估3)被正确分类(绘制)?并且,如果新用户(例如,用户3)加入作业的时间较晚并且没有评估1或评估2 ...

欢迎提出任何建议!

1 个答案:

答案 0 :(得分:2)

这样做的一种方法是创建一个哈希数组,每个哈希包含用户评级和所有可用评估的数组,如

Evaluation.where(:job_id => 1)order('title').map{|e| e.title}.uniq

这将为您提供类似于all_evaluations的内容:

all_evaluations = ['eval1', 'eval2', 'eval3', 'eval4']

用户评估哈希看起来像这样:

user_evaluations = {"UserA"=>{:eval1=>1, :eval3=>3}}, {"UserB"=>{:eval1=>1, :eval=>3}}

all_evaluations将用于标题行标签以及为每个用户记录提取证据:

<tr>
<% all_evaluations.each do |eval_header| %>
  <td><%= eval_header %></td>
<% end %>
</tr>

<% user_evaluations.each do |user| %>
  <tr>
    <td><%= user.keys %></td>
    <% all_evaluations.each do |eval| %>
      <td><%= user.values.first[eval.to_sym] %></td>
    <% end %>
  </tr>
end

这里可能存在很少的错误/变化,但它应该在原则上起作用。