Rails – 呈现复杂的数据视图

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

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

所以,简单地说,我想以表格forms(有点像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,该怎么办…

欢迎任何和所有建议!

一种方法是创建一个哈希数组,每个哈希包含用户评级和所有可用评估的数组,类似于

 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将用于标题行标签和拉取每个用户记录的eval:

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

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