1

モデル 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 コンソールで実行すると機能しますが、モデルからフェッチしようとすると、コンマ区切りの値が得られません。

私は何が欠けていますか?

4

1 に答える 1

1

ActiveRecord は、SQL クエリによって取得されたすべての列を、モデルにあるすべての属性にマップすると思います。ほとんどの場合、これはまったく同じです。おそらく、モデルに仮想アクセサーを作成すると、ActiveRecord は仮想列を仮想属性にマップできます。

class User

  attr_accessible :player_username
  ...

試してみて、これが機能するかどうかを確認してください。

于 2012-07-27T19:36:17.363 に答える