我只是想改进查询,以便提高应用程序的性能。
Student.includes(:parents =>:emails).where("emails.email_address is not null and emails.email_address != ''")
我只是想使用电子邮件表符合条件,所以显然不需要eagerload电子邮件表,而是我更喜欢加入。但我无法弄清楚,如何使用包含和连接在一起?因此,它应该加载父母并加入电子邮件
答案 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/