Rails,在每个表上使用 where 子句连接两个表

Rails, joining two tables with where clauses on each tabe

我是 Web 开发的新手 rails,我第一次尝试构建查询对象。我有一个 table Players 和一个 table DefensiveStats,它有一个外键 player_id,所以这个 table 中的每一行都属于一个玩家。玩家有一个字段 api_player_number,这是我引用的第 3 方使用的 ID。 DefensiveStats 对象有两个与此查询相关的字段 - season_number 整数和 week_number 整数。我想要做的是构建一个包含 3 个参数的查询:api_player_number、season_number 和 week_number,它应该 return DefensiveStats 对象与相应的赛季和周数,属于 api_player_number = 在 api_player_number 中传递的球员。

这是我尝试过的:

class DefensiveStatsWeekInSeasonQuery
def initialize(season_number, week_number, api_player_number)
    @season_number = season_number
    @week_number = week_number
    @api_player_number = api_player_number
end

# data method always returns an object or list of object, not a relation
def data
    defensive_stats = Player.where(api_player_number: @api_player_number)
    .joins(:defensive_stats)
    .where(season_number:@season_number, week_number: @week_number)
    if defensive_stats.nil?
        defensive_stats = DefensiveStats.new
    end
    defensive_stats
end

结束

但是,这不起作用,因为它在 Player class 上执行第二个 where 子句,而不是 DefensiveStats class -> 具体来说,"SQLite3::SQLException: no such column: players.season_number"

我该如何构建这个查询?谢谢!!!

Player.joins(:defensive_stats).where(players: {api_player_number: @api_player_number}, defensive_stats: {season_number: @season_number, week_number: @week_number})

Player.joins(:defensive_stats).where("players.api_player_number = ? and defensive_stats.season_number = ? and defensive_stats.week_number = ?", @api_player_number, @season_number, @week_number)