2010-01-11 4 views
1

Mon objectif est d'imprimer un document json avec la structure décrite dans la réponse choisie au this thread. Je n'ai qu'un seul niveau de sous catégories (2 au total, racine comprise) donc ça devrait être un peu plus facile que le problème là. Le problème que j'ai est avec l'efficacité. Avec seulement ~ 20 catégories racine la récursivité provoque mon script à agir très lentement. Mon contrôleur ressemble à ceci:act_as_tree aux hachages JSON imbriqués

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

Et la méthode respective sur le modèle Catégorie:

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

Quelqu'un peut-il offrir quelques conseils pour rendre ce processus plus efficace? Peut-être chargement impatient ou quelque chose?

Répondre

1

ok, je suppose que "principal" est une portée nommée de catégorie et que les enfants est une association has_many. Vous pouvez ajouter une autre portée à la catégorie, qui récupère les enfants de toutes les catégories dans une requête ... Quelque chose comme:

scope :with_children, includes(:children) 

Cela causerait qu'au lieu de faire une requête par catégorie pour récupérer les enfants, il fera une seule requête pour récupérer les enfants de toutes les catégories que vous chargez.

Questions connexes