1

我在模型用户和模型播放器之间有一个 has_many(通过帐户)关联。

我想知道查询所有用户的最佳方式是什么,并为每个返回的记录获取关联的玩家用户名属性(以逗号分隔的值)。

因此,例如,如果一个名为“John”的用户与 3 个用户名分别为“john_black”、“john_white”、“john_yellow”的玩家相关联。我希望查询不仅返回用户属性,还返回一个名为例如 player_username 的属性,该属性将具有以下值:john_black, john_white, john_yellow.

我在用户模型中尝试了以下 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 回答