2010-01-11 5 views
1

내 목표는 this thread에 선택한 답변에 설명 된 구조로 json 문서를 인쇄하는 것입니다. 하위 카테고리 (루트를 포함하여 총 2 개)의 한 수준 만 있으므로 문제가있는 것보다 조금 더 쉬워야합니다. 내가 가진 문제는 효율성입니다. ~ 20 개의 루트 범주 만있는 경우 재귀를 사용하면 스크립트가 매우으로 천천히 작동합니다. 내 컨트롤러는 다음과 같습니다acts_as_tree 내포 된 JSON 해시에

def categories 
    render :text => "var categories = #{Category.main.map { |c| c.with_children }.to_json};" 
end 

그리고 분류 모델에 대한 각각의 방법

def with_children 
    { 
     :name => self.name, 
     :id => self.id, 
     :parent_id => self.parent_id, 
     :children => self.children.blank? ? nil : self.children 
    } 
end 

사람이이 과정을보다 효율적으로 만들기 위해 몇 가지 조언을 제공 할 수 있습니까? 어쩌면 열심히 선적하거나 뭔가?

답변

1

좋아요, 나는 "main"이 카테고리의 명명 된 스코프이고 그 아이들은 has_many 연관이라고 가정합니다. 당신은 카테고리에 다른 범위는 하나 개의 쿼리에서 모든 범주의 아이들 ... 같은 뭔가를 검색 하나를 추가 할 수 있습니다

scope :with_children, includes(:children) 

이 아이들에게 그것을 검색하는 대신 카테고리 당 하나 개의 쿼리를 만드는 그 원인이 로드중인 모든 범주의 하위 항목을 검색하는 하나의 쿼리 만 수행합니다.

관련 문제