モデル User とモデル Player の間に has_many (アカウント経由) の関連付けがあります。
すべてのユーザーをクエリし、返されたレコードごとに、関連するプレーヤーのユーザー名属性を取得する最良の方法を知りたいです (カンマ区切りの値)。
たとえば、「John」という名前のユーザーが、「john_black」、「john_white」、「john_yellow」というユーザー名を持つ 3 人のプレーヤーに関連付けられているとします。ユーザー属性だけでなく、次の値を持つ player_username などと呼ばれる属性もクエリで返すようにしたいと思いますjohn_black, john_white, john_yellow
。
User モデルで次の Arel クエリを試しました。
select(`users`.*).select("GROUP_CONCAT(`players`.`username` SEPARATOR ',') AS comma_username").joins(:user)
.joins(:accounts => :player )
これにより、次のSQLが得られます。
SELECT `users`.*, GROUP_CONCAT(`players`.`username` SEPARATOR ',') AS comma_username FROM `users` INNER JOIN `accounts` ON `accounts`.`user_id` = `users`.`id` INNER JOIN `players` ON `players`.`id` = `accounts`.`player_id`
これを MySQL コンソールで実行すると機能しますが、モデルからフェッチしようとすると、コンマ区切りの値が得られません。
私は何が欠けていますか?