1

次のモデルがあります: students 、 groups_by_student 、および groups 。

学生テーブルの行は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.

したがって、都市IDをキーとして、学生の合計を値として含む3つのハッシュの配列がありますが、このデータをhtmlテーブルに表示する方法がわかりません。

各「合計」要素ごとにどのように反復できますか? または、この情報を取得する別の方法はありますか?

前もって感謝します

ハビエル

編集:

これは配列全体です

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

そして今、そのグループに値がない場合は、html テーブル内の td ラベルにそれぞれを配置する必要があります。

4

2 に答える 2

0

次のようなハッシュの配列をトラバースしました。

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

あなたのニーズに合わせてそれをハックできますか?残念ながら、あなたの質問はあまり役に立ちません。

于 2012-08-03T20:49:54.897 に答える
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」を出力することがわかりません

于 2012-08-04T01:42:21.310 に答える