2011-09-03 4 views
0

가입 : 기본적으로레일 액티브 내가 레일을 사용하고 있는데 하나 개의 쿼리에 다음을 결합하는 방법 내에서 액티브를 사용하는 방법을 알아 내려고 노력하고 있어요

def children_active(segment) 
    parent_id = Category.select('id').where('segment' => segment) 
    Category.where('parent_id'=>parent_id, 'active' => true) 
end 

, 나는의 하위 범주를 얻으려고 segment라는 고유 한 열에 의해 지정되는 범주입니다. 지금은 첫 번째 쿼리에서 카테고리의 ID를 얻은 다음 두 번째 쿼리에서 parent_id에 해당 값을 사용하고 있습니다. 저는 AR을 사용하여 조인을 수행하는 방법을 알아 내려고 했으므로 한 번의 쿼리로 수행 할 수 있습니다. 당신은 자기를 사용할 수 있습니다

답변

1

는 별칭 테이블 이름으로 조인

Category.joins("LEFT OUTER JOIN categories AS segment_categories on segment_categories.id = categories.parent_id").where("segment_categories.segment = ?", segment).where("categories.active = ?", true) 

이 5 월 정말 멋지다하지 보이지만, 한 줄에 쿼리를 구현할 수 있으며, 솔루션보다 훨씬 적은 성능 손실이있을 것 데이터 수집이 큰 경우 "INCLUDE IN"이 "JOIN"보다 훨씬 느리기 때문에

+0

대단히 감사합니다. 그것은 아주 잘 돌아갔다. – Frank

+0

당신은 오신 것을 환영합니다. –

관련 문제