我的目标是使用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
有人可以提供一些建议来提高这个过程的效率吗?也许是急切的加载还是什么?
答案 0 :(得分:1)
好吧,我假设“main”是Category的命名范围,而child是has_many关联。 您可以将另一个范围添加到类别中,一个用于在一个查询中检索所有类别的子项...类似于:
scope :with_children, includes(:children)
这将导致不是每个类别进行一次查询来检索子项,而是只使用一个查询来检索要加载的所有类别的子项。