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