代码之家  ›  专栏  ›  技术社区  ›  DollarChills

Rails使用zip按年份匹配两个变量

  •  0
  • DollarChills  · 技术社区  · 5 年前

    我有两个变量使用zip连接在一起。这个 @finals_per_game 变量遍历各个季节,以找到相应年份球员的平均值。这个 @won_ring 变量查找 matches.round_abbreviation 'GF'

    例如

    玩家在2017年和2018年有“GF”,但在2019年没有。目前 只有两条记录,因此不匹配 @每场总决赛 matches.match_year

    2019 | Won |
    2018 | Won |
    2017 |     |
    

    2019 |     |
    2018 | Won |
    2017 | Won |
    

    看法

    我必须对照主队和客队的总分来检查球员是否属于任何一支球队,以及他们是否获胜。

    <table>
    <% @finals_per_game.zip(@won_ring).each do |s, ring| %>
     <tr>
      <td>
      <%= s.season %>
      <% if s.team_id == ring.try(:match).try(:home_team_id) && (ring.home_team_total_score < ring.away_team_total_score) %>
       Won
      <% elsif s.team_id == ring.try(:match).try(:away_team_id) && (ring.away_team_total_score < ring.home_team_total_score) %>
       Won 
      <% end %>
      </td>
      <td><%= s.games_count %></td>
      <td><%= '%.1f' % s.avg_points %></td>
      <td><%= '%.1f' % s.avg_rebounds %></td>
     </tr>
     <% end %>
    </table>
    

    控制器

    @finals_per_game = Stat.joins(:match, :player, :club).where('stats.player_id = ? AND matches.round_abbreviation NOT LIKE ?', @player.player_id, '%Rd%').group('players.id, stats.team_id, matches.match_year, clubs.abbreviation, clubs.id')
        .select('players.id, stats.team_id, matches.match_year as season, AVG(stats.point) as avg_points, AVG(stats.rebounds) as avg_rebounds, COUNT(stats.id) as games_count').order('matches.match_year desc')
    
    @won_ring = Stat.joins(:match, :player, :club).where('stats.player_id = ? AND matches.round_abbreviation = ?', @player.player_id, 'GF')
        .group('players.id, matches.id, clubs.id, matches.match_year, clubs.abbreviation').select('matches.*, players.*, clubs.*')
        .order('matches.match_year desc')
    
    0 回复  |  直到 5 年前