【问题标题】:Get ActiveRecord results based on has_many relationships根据 has_many 关系获取 ActiveRecord 结果
【发布时间】: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


【解决方案1】:

您是否尝试过使用joins?像这样的:

Toy.joins(:toy_parts).where("toy_parts.content like (?) AND toy_parts.type_desc='arm'", "%Left arm from%"")

【讨论】:

  • 这就是我要找的。​​span>
  • 很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多