1

这应该很简单,但我已经做了一天了,看不到明确的答案。

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

因此,简单地说,我想以表格形式(有点像 Excel 工作簿)呈现数据,评估名称沿 x 轴,用户名沿 y 轴。

所以,它看起来像这样:

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

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

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

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

欢迎任何和所有建议!

4

1 回答 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将用于标题行标签和提取每个用户记录的评估:

<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

这里可能有一些错误/更改,但它应该在原则上起作用。

于 2012-10-02T17:46:23.567 回答