2012-07-27 2 views
1

모델 User와 모델 플레이어간에 has_many (계정을 통한) 연결이 있습니다.Rails를 사용하여 쿼리에 has_many 레코드 포함

모든 사용자를 쿼리하는 가장 좋은 방법은 무엇인지 알고 싶습니다. 반환 된 각 레코드에 대해 관련 플레이어의 usernames 특성 (쉼표로 구분 된 값)을 얻습니다.

예를 들어 'John'이라는 사용자가 'john_black', 'john_white', 'john_yellow'사용자 이름을 가진 3 명의 선수와 연결되어있는 경우 쿼리에서 User 특성뿐만 아니라 player_username과 같은 특성을 반환하도록하고 싶습니다.이 값은 john_black, john_white, john_yellow입니다.

나는 사용자 모델에서 다음 Arel 쿼리를 시도

:

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의에서 이것을 실행하면 콘솔이 작동하지만 경우 : 나에게 다음과 같은 SQL을 제공

select(`users`.*).select("GROUP_CONCAT(`players`.`username` SEPARATOR ',') AS comma_username").joins(:user) 
     .joins(:accounts => :player) 

모델에서 가져 오려고하면 쉼표로 구분 된 값을 얻지 못합니다.

무엇이 누락 되었습니까?

답변

1

ActiveRecord는 SQL 쿼리로 검색된 모든 열을 모델에있는 모든 특성과 매핑한다고 생각합니다. 대부분의 경우 정확히 동일합니다. 어쩌면 모델에 가상 액세서를 만들면 ActiveRecord가 가상 열을 가상 속성에 매핑 할 수 있습니다.

class User 

    attr_accessible :player_username 
    ... 

이 기능이 작동하는지 확인해보십시오.

관련 문제