2

와 조인 나는 다음과 같은 스키마가 :레일 액티브 레코드 쿼리는 통화를 선택

사진 has many 그룹 has many 사용자를.

저는이 레일스 서버를 iOS 응용 프로그램의 백엔드로 사용하고 있으며 사진을 추가 할 때 지속적으로 그룹의 모든 관련 사용자에게 알림을 푸시해야합니다.

나는 문제가있는 User.ids 만 해결할 수있는 가장 저렴한 쿼리를 찾고 있습니다.

은 지금까지 나는

Photo.find(1).groups.joins(:users) 

내가이 후 선택 인수를 넣어야 할 것을 알고

을 가지고 있지만 내 인생 구문을 알아낼 수 없습니다.

사진이있는 경우 영향을받는 사용자 ID의 컬렉션을 찾는 가장 효율적인 방법을 찾고 있습니다.

어떤 도움을 주시면 감사하겠습니다.

+0

'Group.where (photo_id : 1) .users.collect {| u | puts u.id}'사진이 has_many 그룹으로 그룹이 belongs_to 사진이므로 gorups 테이블에 foreign_key로 photo_id가 있으므로이 것을 시도하십시오. –

답변

0
users_id = [] 
Group.where(photo_id: 1).users.collect{|u| users_id << u.id} 
puts users_id 

사진 has_many 그룹, 그래서 그룹으로 belongs_to 사진 및 그룹 테이블은 외부 키로 photo_id 있습니다.

그래서 시도해보십시오. 당신의 사진 모델에서

1

, 다른 협회는 그럼 당신은

@photo = Photo.includes([:group_users]).where("photos.id = ?", 1).first 
@affected_users = [] 
@photo.group_users.map {|user| @affected_users << user.id} 

는 이제 @affected_users 모든 사용자 ID를 포함하는 다음 코드로 사용자를 찾을 수 있습니다 사용자에게

has_many :group_users, :through => :groups, :source => :users 

라고 할 수 있습니다.