[英]Rails: Restricting to certain records when joining
目前,我正在使用以下代码来获取所有玩家,进入其player_stats对象并汇总其目标。
Player.joins(:player_stats).group('players.id').order('SUM(player_stats.goals) DESC')
如何限制它不使用所有player_stats对象,如果我只想对具有特定game_id的player_stat对象的目标求和呢?
注意:我正在使用mySQL。
您只需要在查询中添加位置:
Player.joins(:player_stats).group(:id).where("player_stats.game_id = ?", game_id).order("SUM(player_stats.goals) DESC")
在查询中添加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将为关联创建where条件。 它实际上足够聪明,可以使用关联,因此您可以执行以下操作:
class Player
belongs_to :hometown
end
Player.joins(:hometown)
.where(hometown: { name: 'Brooklyn' })
Rails将查询WHERE hometowns.name = 'Brooklyn'
而不是hometown.name
。
因此,它通常比使用字符串条件更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.