我只是想改进查询,从而提高应用程序的性能。
Student.includes(:parents =>:emails).where("emails.email_address is not null and emails.email_address != ''")
我只是想使用电子邮件表满足条件,所以显然不需要预先加载电子邮件表,相反我更喜欢联接。但我无法弄清楚如何使用包含和连接在一起?这样它就应该立即加载父母并通过电子邮件加入
你可以通过将两者链接在一起来做到这一点:
Student.joins(parents: :emails).includes(:parents).where("emails.email_address is not null and emails.email_address != ''")
它的工作原理是这样的joins
将创建一个JOIN
但不将任何数据保留在内存中,而includes
会将数据预加载到内存中,但不会创建连接。
我建议阅读这篇博文:https://web.archive.org/web/20200804112405/http://tomdallimore.com/blog/includes-vs-joins-in-rails-when-and-where/ https://web.archive.org/web/20200804112405/http://tomdallimore.com/blog/includes-vs-joins-in-rails-when-and-where/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)