質問: TeamモデルとPlayerモデルがhas_manyの関係でpolymorphicなScoreモデルを持つというような構成で チームやプレイヤーに得点を付けることができるシステムを作成しています。 チームに所属しているプレイヤーの一覧を表示するときに Scoreモデルが持つvalueカラムの合計値を使ってソートをかけたいです。 Playerモデルに以下のスコープを作成しました。 ``` scope :sorted, -> { joins(:scores) .group("players.id") .order("sum(scores.value) desc") } ``` しかし、これだとひとつもスコアを付けられていない要素が含まれずに スコアを付けられている要素の中でソートが行われてしまいます。 スコアが付けられていない要素に対してはデフォルトで0点ということにして 全ての要素を取得したいのですがどうすればよいでしょうか?
回答: 例によって、より良い回答が付くまでの繋ぎとして、粗い回答を付けておきます。 要求されている操作は SQL 的には `LEFT OUTER JOIN` という操作です。 検索する際はこれをキーワードにすると良さそうです。 検索の結果、こんな記事: Railsで生SQLを書かずにLEFT JOINする方法 が見つかりました。 こちらの記事によれば `includes` を使う、もしくは squeel を使うということのようです。