多个变量未对齐

时间:2015-09-04 06:26:16

标签: ruby-on-rails ruby-on-rails-3.2

我在表中对齐多个变量时遇到问题。我想匹配每列中的年份并显示数据(如果存在),如果不显示' 0'。我附上了最新的图片,列d的数据应该是在2011年。enter image description here

<% @a.zip(@b, @c, @d) do |a, b, c, d| %>
    <tr>
        <td><%= a.year %></td>

        <td><% if a.nil? %>0<% else %><%= a.id %><% end %></td>
        <td><% if a.nil? %>0<% else %><%= "%.2f" % (a.avg/227) %><% end %></td>

        <td><% if b.nil? %>0<% else %><%= b.id %><% end %></td>
        <td><% if b.nil? %>0<% else %><%= "%.2f" % (b.avg/227) %><% end %></td>

        <td><% if c.nil? %>0<% else %><%= c.year %> <%= c.id %><% end %></td>
        <td><% if c.nil? %>0<% else %><%= "%.2f" % (c.avg/227) %><% end %></td>

        <td><% if d.nil? %>0<% else %><%= d.id %><% end %></td>
        <td><% if d.nil? %>0<% else %><%= "%.2f" % (d.avg/227) %><% end %></td>

    </tr>
    <% end %>

控制器

  @a = Result.where(id: params[:id_select]).group('year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').order('year ASC')

  @b = Result.where(id: params[:id_select]).group('results.year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '0').order('year ASC')

  @c = Result.where(id: params[:id_select]).group('results.year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '1').order('year ASC')

  @d = Result.where(id: params[:id_select]).group('results.year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '2').order('year ASC')

1 个答案:

答案 0 :(得分:1)

您的@d数组可能只有一个元素(2011年数据)。

当你zip与其他更大的数组一起使用时,该数据与其他2007年的结果相关联。

例如:

2.1.5 :001 > a = [1,2,3]
 => [1, 2, 3]
2.1.5 :002 > b = [4,5,6]
 => [4, 5, 6]
2.1.5 :003 > c = [7]
 => [7]
2.1.5 :004 > a.zip(b,c)
 => [[1, 4, 7], [2, 5, nil], [3, 6, nil]]

您需要按年查询数据库,而不是仅仅询问ID可用的数据。