Rails - 使用2个表和计数组

时间:2012-08-03 18:41:30

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

我有以下模特:学生,groups_by_student和团体。

一排学生表是city_id,所以我必须显示一个html表

            Total      group1     group2     group3
city1         30         10         5         15
city2          2          0         0          2
city3         20         10        10          0
city4          5          0         5          0
city5         10          0         2          8

这就是我所做的:

groups = Group.find([1,4,6]) #Array of groups id's

total = []
groups.each do |g|
  total << Student.joins(:groups_by_students).where(:groups_by_students => {:group_id => g.descendants}).count(:group => :city_id)
end

#I'm using AwesomeNestedSet gem, so g.descendants gives group children.

所以现在我有一个包含3个哈希的数组,其中包含城市ID作为键,学生总数作为值,但现在我不知道如何在html表中显示这些数据。

如何根据每个“total”元素进行迭代?或者是否有另一种获取此信息的方式?

提前致谢

哈维尔

修改

这是总数组

total = [
    {city1 =>10, city3 => 10},
    {city1 => 5, city3=>10, city4=>5, city5 => 2},
    {city1 => 15, city2 => 2}
]

现在我必须将每个放在html表格中的td标签中,如果该组没有值,则为0。

2 个答案:

答案 0 :(得分:0)

我已遍历了一系列哈希,如;

ary.each do |hash| puts "<tr>#{hash.keys} : #{hash.values}</tr>" end

你能破解它以满足你的需求吗?我担心你的问题没有提供很多工作。

答案 1 :(得分:0)

这就是我所做的,可能会对你有所帮助:(这里总值是最后一列)

<table>
<% i = 1%>
<% total = 0%>
<% city=""%>
<% 5.times do %>
<tr>
<% city = 'city'+ "#{i}" %>
<% @total.each do |hash| %>
<% if(hash[city].nil?)%>
<% hash[city] = 0 %>
<%end%>
<% total += hash[city].to_i %>
<td><%= hash[city] %></td>
<%end %>
<td> <%= total %></td>
<% total = 0 %>
<% i += 1 %>
</tr>
<%end%>
</table>

此行由城市而非集团控制。因此除了双循环之外我找不到任何其他方式。如果您需要在第一列中打印总数然后接下来的其余信息,那么我认为您需要首先显示总数然后再次循环并显示每个组的城市值 此外,为此您需要事先知道城市的数量,否则我们将不知道在特定群体中为特定城市打印'0'