这应该是一件简单的事情,但我已经有一天了,并且看不清楚答案。
我有三个基本模型:用户,评估和工作。用户处理作业,作业所有者评估用户。用户可以有许多不同的工作。每个工作将多次评估其相关用户(在工作中,每个相关用户将具有相同的评估 - 当然具有不同的分数。)
所以,简单地说,我想以表格形式呈现数据(有点像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 ...
欢迎提出任何建议!
答案 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
这里可能存在很少的错误/变化,但它应该在原则上起作用。