在Rails循环中列出每列的两个记录

时间:2016-10-20 22:14:06

标签: ruby-on-rails ruby-on-rails-4

我正在尝试遍历每个matchId的两条记录但是收到错误。

undefined method `first' for 1:Fixnum

希望在表格视图中列出数据,团队1,团队2和目标都在同一行。有没有更好的方法来实现这个结果?或者我是在正确的轨道上,但遗漏了什么?

数据库

|matchId|      matchDate    |teamId|goals|
|  101  |2016-05-14 11:40:00|  10  |  3  |
|  101  |2016-05-14 11:40:00|  20  |  2  |
|  102  |2016-05-14 13:30:00|  11  |  0  |
|  102  |2016-05-14 13:30:00|  21  |  1  |

控制器

@match = Match.all.group_by { |m| m.matchDate.beginning_of_week }

查看

<table class="table table-bordered">
  <% @match.each do |date, games| %>
    <tr class="match-date">
      <td colspan='5'><%= date.strftime('%d %B, %Y') %></td>
    </tr>
      <% games.group_by(&:matchId).each do |m, t| %>
        <% t.each do |d| %>
          <tr>
            <td><%= d.teamId.first  %></td>
            <td><%= d.goals.first %></td>
            <td>Defeated</td>
            <td><%= d.teamId.last  %></td>
            <td><%= d.goals.last %></td>
          </tr>
        <% end %>
      <% end %>
  <% end %>
</table>

2 个答案:

答案 0 :(得分:1)

您不需要第二个循环,因为您正尝试访问这两个循环。然后,您将访问属性并首先调用属性而不是匹配集合。你应该尝试这样的事情。

<table class="table table-bordered">
  <% @match.each do |date, games| %>
    <tr class="match-date">
      <td colspan='5'><%= date.strftime('%d %B, %Y') %></td>
    </tr>
      <% games.group_by(&:matchId).each do |m, t| %>
          <tr>
            <td><%= t.first.teamId %></td>
            <td><%= t.first.goals %></td>
            <td>Defeated</td>
            <td><%= t.last.teamId  %></td>
            <td><%= t.last.goals %></td>
          </tr>
      <% end %>
  <% end %>
</table>

答案 1 :(得分:0)

我在思考,因为您的记录已经订购,您应该能够使用each_slice并且每次都能获得2条记录。这将消除你的第二个lool

高级代码将是

@match.each_slice(2) do |element|
  <tr>
    <td><% = element.first %></td>
    <td><% = element.last %></td> 
  <tr>
end