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

How to use joins inside includes in rails active record query?

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

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

我只是想满足使用电子邮件 table 的条件,所以显然不需要预先加载电子邮件 table,相反我更喜欢加入。但我无法弄清楚,如何使用 includes 和 joins 在一起?。这样它就应该 eagerload parents 并通过电子邮件加入

你可以通过将两者链接在一起来做到这一点:

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

它的工作方式是 joins 会创建一个 JOIN 但不会在内存中保留任何数据,而 includes 会在内存中预加载数据但不会创建加入。

我建议阅读此博客 post:https://web.archive.org/web/20200804112405/http://tomdallimore.com/blog/includes-vs-joins-in-rails-when-and-where/