我正在尝试遍历每个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>
答案 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