2017-02-20 31 views
0

我想显示一个带有树结构的下拉列表。使用@manoj给出的this SO解决方案,category_options_array的代码在模型的选择表单控件中以奇妙的方式显示树更少的条目,但另一个模型有大约30个父ID,其中一些具有1级深度,服务器崩溃。实际上,即使它使用了20个parent_ids,它也会执行20个SQL查询,这对于一个下拉控件来说太多了。Rails通过急切加载优化树结构代码

我想它收集到缓存 - 这样

@categories = Category.where('parent_id = ? AND id != ?', parent_id, current_id).order(:name) 
@categories.each do |c| ..... 

然而,它运行相同的20 SQL查询,20缓存。

当我阅读急切的加载它通常是一个连接条件,我找不到任何单个模型的例子。可以通过加载/任何其他方式优化查询运行一次,并安排数组显示?TIA。

回答

0

很难给出代码一个确切的答案,没有看到你的模型的数据结构是如何设置的,但总体来讲,你可以使用“包括”语句渴望负荷,这也支持嵌套:

http://apidock.com/rails/ActiveRecord/QueryMethods/includes

包含子模型时查询的外观如何?

+0

它运行尽可能多的选择查询,因为有类别记录,甚至在收集它们在一个哈希@categories它运行所有这些......奇怪!类别模型是:name:string,parent_id:integer(默认值= 0) – Means

+0

您可以发布模型定义的要点吗? – MBHNYC