Ruby on rails Rails-呈现复杂数据视图

Ruby on rails Rails-呈现复杂数据视图,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,这应该很简单,但我已经做了一天了,看不出一个明确的答案 我有三个基本模型:用户、评估和工作。用户处理作业,作业所有者评估用户。用户可以有许多不同的工作。每个作业都会对其相关用户进行多次评估(在作业中,每个相关用户都有相同的评估,当然分数不同。) 因此,简单地说,我想以表格形式(有点像excel工作簿)呈现数据,评估名称穿过x轴,用户名沿着y轴 所以,它看起来是这样的: Evaluation 1 | Evaluation 2 | Evaluation 3 __

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

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

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

所以,它看起来是这样的:

        Evaluation 1  |  Evaluation 2  |  Evaluation 3
       _______________________________________________________
User 1   Good              Poor            Outstanding
User 2   Poor              Good            Good
user_evaluations = {"UserA"=>{:eval1=>1, :eval3=>3}}, {"UserB"=>{:eval1=>1, :eval=>3}}
我可以很容易地在x或y上显示标签,但不能同时显示两者

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

问题2)我如何确保数据(例如,用户2评估3)正确分类(绘制)?而且,如果新用户(例如,用户3)延迟加入作业,并且没有评估1或评估2


欢迎提出任何建议

一种方法是创建一个散列数组,每个散列包含用户评级和一个包含所有可用评估的数组,如

Evaluation.where(:job_id => 1)order('title').map{|e| e.title}.uniq
这将为您提供与所有_评估类似的内容:

all_evaluations = ['eval1', 'eval2', 'eval3', 'eval4']
用户评估散列将如下所示:

        Evaluation 1  |  Evaluation 2  |  Evaluation 3
       _______________________________________________________
User 1   Good              Poor            Outstanding
User 2   Poor              Good            Good
user_evaluations = {"UserA"=>{:eval1=>1, :eval3=>3}}, {"UserB"=>{:eval1=>1, :eval=>3}}
所有_求值
将用于标题行标签和每个用户记录的求值:

<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

结束

这里可能有一些错误/更改,但原则上应该可以工作。

多个作业会是什么样子,用户行会为每个作业重复一次吗?或者,此视图一次仅显示1个职务用户评估?并且最多有3次评估?感谢您的帮助!此视图将仅显示特定作业的每个工作人员的所有评估。可以有任何数量的评估和工作。我喜欢创造性。这不是一个解决方案,但我认为方向可能是好的。非常感谢你抽出时间来帮助我!如果我有任何问题,我会告诉你的。作为跟进,我修改了代码,所有的显示都很好。再次感谢你的帮助!!