目前我正在使用以下内容获取所有玩家,进入他们的player_stats对象,并总结他们的目标。
Player.joins(:player_stats).group('players.id').order('SUM(player_stats.goals) DESC')
如何限制它不使用所有的player_stats对象,如果我只想总结具有特定game_id的player_stat对象的目标呢?
注意:我正在使用mySQL。
答案 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
。
因此,它通常优于使用字符串条件。