我有一个返回activerecord结果的函数,如下所示:
def athlete_statistics(game_id)
athletes.includes(:statistics).where('statistics.game_id = ?', game_id)
end
这将返回所有运动员的特定比赛统计数据。但是,它删除了没有该游戏统计数据的运动员,我希望将其包括在内。
我试图像这样解决问题:
def athlete_statistics(game_id)
athletes.includes(:statistics).where('statistics.game_id = ?', game_id) | athletes
end
这会在最后添加失踪的运动员并返回正确的结果集,但是当我在结果上调用to_json
时:
<%= @games.first.athlete_statistics.to_json(
:include => [:user, :statistics => {:include => :attribute}]
).html_safe %>
它试图加载该运动员的所有统计数据,忽略where条件(我猜是因为它试图在关联为空的情况下延迟加载)
有没有更好的方法来解决这个问题?
更新
这种方法不工作
athletes.includes(:statistics).where('statistics.game_id = ? OR statistics.game_id IS NULL', game_id)
因为它排除了所有与其他游戏相关的统计数据的运动员。我需要include
提供的包含性左外连接。