【问题标题】:Rails, joining two tables with where clauses on each tabeRails,将两个表与每个表上的 where 子句连接起来
【发布时间】:2017-08-27 16:00:30
【问题描述】:

我是 Web 开发和 Rails 的新手,我第一次尝试构建一个查询对象。我有一个 Players 表和一个 DefensiveStats 表,它有一个外键 player_id,所以这个表中的每一行都属于一个玩家。玩家有一个字段 api_player_number,这是我引用的第 3 方使用的 id。 DefensiveStats 对象有两个与此查询相关的字段——一个 season_number 整数和一个 week_number 整数。我想做的是构建一个带有 3 个参数的单个查询:一个 api_player_number、season_number 和 week_number,它应该返回具有相应季节和周数的 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 类上执行第二个 where 子句,而不是 DefensiveStats 类 -> 具体来说,“SQLite3::SQLException: no such column: player.season_number”

如何构造这个查询?谢谢!!!

【问题讨论】:

    标签: sql ruby-on-rails join where


    【解决方案1】:
    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)
    

    【讨论】:

    • 谢谢!这是完美的
    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多