我有一个返回 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
.