Rails包括包含条件的记录

时间:2012-09-19 20:12:59

标签: ruby-on-rails ruby-on-rails-3

我有一个返回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提供的包含性左外连接。

0 个答案:

没有答案