Rails通过eager-load优化树结构代码

时间:2017-02-20 14:36:48

标签: ruby-on-rails forms tree treeview ruby-on-rails-5

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

我尝试将其收集到缓存中 - 就像这样

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

但是,它运行相同的20个SQL查询和20个缓存。

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

1 个答案:

答案 0 :(得分:0)

很难在代码中给出确切的答案而不了解您的模型的数据结构是如何设置的,但一般来说,您可以使用" includes"渴望加载的语句,也支持嵌套:

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

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