2012-07-27 92 views
1

我在模型用户和模型播放器之间有一个has_many(通过帐户)关联。在Rails查询中包含has_many记录

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

因此,例如,名为'John'的用户与3个用户名为'john_black','john_white','john_yellow'的玩家相关联。我希望该查询不仅返回用户属性,还返回一个名为player_username的属性,该属性的值为:john_black, john_white, john_yellow

我试图在用户模式下阿雷尔查询:

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执行这个控制台它的工作原理,但如果我尝试从模型中获取,我没有得到逗号分隔值。

我错过了什么?

回答

1

我相信ActiveRecord将SQL查询检索的所有列与您模型中的所有属性进行映射,在大多数情况下它们完全相同。也许如果你在你的模型上创建一个虚拟访问器,ActiveRecord可以将你的虚拟列映射到虚拟属性。

class User 

    attr_accessible :player_username 
    ... 

试试看看它是否有效。

相关问题