2010-01-11 107 views
1

我的目标是打印一个json文档,其结构描述在this thread的选定答案中。我只有一个子类别(总共2个,包括root),所以它应该比那里的问题容易一点。我遇到的问题是效率。只有大约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”是Category的命名范围,而且children是has_many关联。 你可以添加其他范围,类别,一个检索一个查询所有类别的孩子......是这样的:

scope :with_children, includes(:children) 

这将导致这反而让每一个类别查询,以获得孩子们来说,将只有一个查询来检索您正在加载的所有类别的子项。