Rails:加入时限制某些记录

时间:2016-10-09 14:05:36

标签: mysql ruby-on-rails models

目前我正在使用以下内容获取所有玩家,进入他们的player_stats对象,并总结他们的目标。

Player.joins(:player_stats).group('players.id').order('SUM(player_stats.goals) DESC')

如何限制它不使用所有的player_stats对象,如果我只想总结具有特定game_id的player_stat对象的目标呢?

注意:我正在使用mySQL。

2 个答案:

答案 0 :(得分:1)

您只需要添加查询的位置:

Player.joins(:player_stats).group(:id).where("player_stats.game_id = ?", game_id).order("SUM(player_stats.goals) DESC")

答案 1 :(得分:0)

在查询中添加where子句:

Player.joins(:player_stats)
      # you can actually pass a model as well.
      .where(player_stats: { game: game_id }) 
      .group('players.id')
      .order('SUM(player_stats.goals) DESC')

当您将哈希值传递给.where时,rails将创建关联条件。它实际上足够聪明,可以使用关联,所以你可以这样做:

class Player
  belongs_to :hometown
end

Player.joins(:hometown)
      .where(hometown: { name: 'Brooklyn' })

和rails会查询WHERE hometowns.name = 'Brooklyn'而不是hometown.name

因此,它通常优于使用字符串条件。