如何在内部使用连接包含在rails活动记录查询中?

时间:2016-06-06 06:03:07

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2

我只是想改进查询,以便提高应用程序的性能。

 Student.includes(:parents =>:emails).where("emails.email_address is not null and emails.email_address != ''")

我只是想使用电子邮件表符合条件,所以显然不需要eagerload电子邮件表,而是我更喜欢加入。但我无法弄清楚,如何使用包含和连接在一起?因此,它应该加载父母并加入电子邮件

1 个答案:

答案 0 :(得分:8)

你通过将两者结合在一起来做到这一点:

Student.joins(parents: :emails).includes(:parents).where("emails.email_address is not null and emails.email_address != ''")

它的工作方式是joins将创建JOIN但不会创建内存中的任何数据,而includes将预先加载内存中的数据但不创建连接。

我建议阅读http://tomdallimore.com/blog/includes-vs-joins-in-rails-when-and-where/