2016-08-05 2 views
0

나는 다음과 같은 클래스가 :Mongoid 범위 : 요소가 컬렉션 있는지 확인하는 방법

class Team 
    ... 
    has_many :players 
end 

class Player 
    ... 
    field :gender, type: String 
    belongs_to :Team 
end 

가 나는 scope :girl_team 그래서 적어도 한 플레이어가 모든 팀을 반환 클래스 Team에서 만들려을 "소녀"를 성별로

잘 모르겠습니다. 시도 :

scope :girl_team, ->{Where('player.gender' => "girl")} 

작동하지 않는 것 같습니다.

답변

1

이렇게하려면 JOIN이 필요합니다. 그러나/Mongoid (SQL/ActiveRecord과 달리)에는 JOIN이 없습니다. 경우, 그러나, 당신은 (MongoDB/Mongoid 특수/고유) TeamembedPlayer는, 그 scope은 다음과 같습니다

scope :girl_team, ->{where('players.gender' => "girl")} 

또 다른 해결책은 당신이 원하는 것을 얻기 위해 두 개의 쿼리를 사용하는 것입니다

team_ids = Player.where(gender: "girl").distinct(:team_id) 
teams = Team.any_in(id: team_ids)