2012-07-27 89 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 
    ... 

試試看看它是否有效。

相關問題