acts_as_tree用于嵌套JSON哈希

时间:2010-01-11 22:13:44

标签: jquery ruby-on-rails ruby

我的目标是使用this thread上所选答案中描述的结构打印一个json文档。我只有一个级别的子类别(总共2个,包括root),所以它应该比那里的问题容易一点。我遇到的问题是效率。只有大约20个根类别,递归导致我的脚本慢慢地非常。我的控制器看起来像这样:

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 个答案:

答案 0 :(得分:1)

好吧,我假设“main”是Category的命名范围,而child是has_many关联。 您可以将另一个范围添加到类别中,一个用于在一个查询中检索所有类别的子项...类似于:

    scope :with_children, includes(:children)

这将导致不是每个类别进行一次查询来检索子项,而是只使用一个查询来检索要加载的所有类别的子项。