2012-08-23 1 views
0

사용자 has_many 항목 (내가 그것을 특정 mongoid 생각하지 않지만, 어쨌든) 나는 주어진 사용자가 모든 클라이언트를 수집해야합니다. 현재 저는 다음을 사용하고 있습니다 :레일, Mongoid 및 항목 mongoid을 사용하여 클라이언트</p> <p>belongs_to 복잡한 쿼리

@clients = current_user.items.map{|c| c.client} 

그러나 확실히 좋지는 않습니다. 구현을위한 최선의 방법은 무엇입니까?

+1

끔찍한 일이 아닙니다. 그러나 궁극적 인 구문을 어떻게 보이는지 의사 코드를 통해 설명하는 것이 가장 좋습니다. 기본적으로 코드에 통사론적인 설탕을 적용하고 더 깨끗한 코드를 사용하고자하는 것 같습니다. clients = user.all_clients – RadBrad

+0

우선, 결과가 배열이므로 매우 편리합니다. 둘째, 잘 모르겠습니다 만, 엄청난 양의 기록으로 루비의 어깨에 두는 것이 좋지 않다고 생각합니까? (다시, mongodb입니다.) –

+0

알았어, 당신이 원하는 것을하는 SQL 문을 공예품으로 사용하거나 ActiveRecord가 (열심히 로딩하는) 것을 사용하는 몇 가지 옵션이 있다고 생각한다. 이 두 가지를 결정하는 것은 응용 프로그램마다 다를 수 있습니다. [link] (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html) Eager Loading 섹션을 확인하십시오. – RadBrad

답변

2

N + 1 문제가 발생하지 않도록 다음과 같이하십시오.

# first you retrieve all client ids 
ids = current_user.items.map(&:client_id) 

# then you retrieve all clients at once 
@clients = Client.in(id: ids)