2016-10-20 6 views
1

matchIdごとに2つのレコードをループしていますが、エラーが発生しています。Railsループで列ごとに2つのレコードを一覧表示する

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> 

答えて

1

あなたの第二のループは、BEが必要とされていません両方にアクセスしようとしているからです。次に、属性にアクセスし、一致のコレクションにない属性を最初に呼び出します。このようなものを試してみるべきです。

<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> 
+0

がはるかにヨーヨーに私たちに感謝だろうなくなります。ばっちり成功! – DollarChills

+1

問題はない、グループ分けは難しい –

0

私はあなたのレコードが注文されているので、あなたがeach_sliceを使用して、2つのレコードごとに取得することができるはずと思っています。それはあなたの第二lool

ハイレベルのコードが

@match.each_slice(2) do |element| 
    <tr> 
    <td><% = element.first %></td> 
    <td><% = element.last %></td> 
    <tr> 
end 
関連する問題