2011-10-27 1 views
2

사용자, 멤버십 및 그룹 모델이 있습니다. 사용자는 많은 멤버쉽을 가지고 있으며 멤버쉽을 통해 그룹화됩니다. 그룹에는 많은 멤버쉽이 있고 멤버쉽을 통해 사용자가 있습니다. 멤버십은 둘 다에 속합니다.활성 레코드 쿼리 모델 'select'및 'where'을 사용하여 배열 결과

사용자가 사용자 인덱스보기에 액세스 할 때 사용자가 속한 그룹에 속한 모든 사용자를 표시하려고합니다. 작동하지 않는 다음 코드를 생성했습니다. 쿼리를 작동시킬 수없는 것 같습니다. 피스 도움말!

Users (사용자) 컨트롤러의 코드

class UsersController < ApplicationController 

    def index 
     @users = current_user.relevant_members 
    end 

end 

콘솔에서 테스트 할 때, user_ids는 ID의 배열이 아닌 이유

def relevant_members 
    group_ids = self.group_ids 
    user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})") 
    User.find(user_ids) 
end 

내가 이해하지 못하는 사용자 모델의 코드 다음 배열이 있습니다.

[#<Membership user_id: 2>, #<Membership user_id: 2>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 2>] 

사용자 ID 배열을 반환하는 더 좋은 방법은 무엇입니까? 모든 관련 그룹 회원을 찾으십니까? 당신의 user_ids 클래스 Membership의 목적은 따라서 당신의 배열을 얻을 수 없기 때문에

답변

3

Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")

반환 회원 객체의 배열을 선택합니다 ("USER_ID ")는 DB에서 개체로로드되는 필드 만 변경합니다.

그것은 당신이() 함수 당기기를 시도해 봤어 ID

user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})").map(&:user_id) 
0

이있는 'user_ids'당신은 또한

user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})") 
    user_ids_array = user_ids.collect{|u| u.user_id} 
    User.find(user_ids_array) 

를 다음과 같이 뭔가를해야 직접

당신은 당신의 where 절을 다음과 같이 수정할 수 있습니다. 이것은 루비 방식입니다.

user_ids = Membership.select("user_id").where(["group_id IN (?)", group_ids]) 
1

Membership.select('user_id')는 지금까지 맞습니다, 바로 user_id 속성 Membership 객체의 배열을 반환합니다. 이 결과에서 ID를 추출 할 경우 작동합니다 :

membershipts = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})") 
user_ids = memberships.map(&:user_id) 

안부

토비아스 항상

0
Membership.where("group_id in (#{groups.collect(&:id).join(',')})") 
    .all.collect(&:user_id) 
관련 문제