0

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

4

0 回答 0