繁体   English   中英

Rails:加入时仅限某些记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM