使用ActiveRecord

时间:2016-04-26 21:36:41

标签: mysql ruby-on-rails ruby activerecord ruby-on-rails-4.2

是否可以从用户表中急切加载特定条目,以及通过belong_to附加的所有关联表。

例如,我有users表,accountspatients表,belong_to :user。如果我想获取特定的User表条目并eager_load相关的表,类似于这样:

user = User.find_by_email("testemail@here.com").eager_load(:accounts, :patients)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你很亲密。尝试将关联放在eager_load调用中的数组中,如下所示:

user = User.includes([:accounts, :patients]).find_by(email: "testemail@here.com")

现在您已经包含了关联的表,然后找到了您的用户,您可以从用户的其他表中调用任何属性,而无需从数据库中触发另一个查询。例如,一旦运行,您可以执行以下操作:

all_user_accounts = user.accounts

这不会在数据库中触发查询,而是从内存中加载。

如果使用#eager_load,则执行一个查询,而包含将根据其认为必要的内容在一个或两个中执行。那么#includes是什么?它决定了你将采用哪种方式。你让Rails处理这个决定。

查看本指南,了解有关rails中的includes / eager_load / preload的详细信息: http://blog.arkency.com/2013/12/rails4-preloading/