【发布时间】:2017-06-19 17:09:06
【问题描述】:
我有一个 Toy 和 ToyPart ActiveRecord 类。 Toy has_may ToyPart 关系。 ToyPart ActiveRecord 有一个描述 ToyPart 的 content 字段和一个非常简要描述 ToyPart 的 type_desc 字段。
我需要根据来自 ToyPart 的 content 和 type_desc 字段获取所有 Toy 记录。我做了这个声明来得到结果:
Toy.all.to_a.toy_parts do {|toy_part| toy_part.where("content like (?) and type_desc='arm'", "%Left arm from%" }
此查询需要太多时间才能返回结果。 Toy 表有超过 270000 条记录,每个 Toy 至少有 5 个 ToyPart 结果。
我是 Ruby 和 Rails 的新手。将所有记录转换为数组我相信这是一个巨大的过程,并且在循环中执行另一个查询会增加更多成本。
to_a 不是一个好主意。为了减轻处理,我可以做些什么来改善它?
P.S:我使用的是 rails 4.2.6。
【问题讨论】:
-
任何包含“%something%”的搜索都会很长。您的代码中发生的情况是,您实际上是一遍又一遍地进行此搜索,使其变得非常长。 Atul Khanduri 对连接的回答意味着您只命中了 1 个数据库。
标签: ruby-on-rails ruby activerecord