Ruby on rails 尽管明确指定了select,但立即加载会获取所有字段

Ruby on rails 尽管明确指定了select,但立即加载会获取所有字段,ruby-on-rails,ruby-on-rails-3.2,eager-loading,Ruby On Rails,Ruby On Rails 3.2,Eager Loading,我有一个这样的疑问 company.users.select("users.id, users.state").includes(:organization) 在这里,我渴望加载协会组织。我希望在对象中获取属性id和用户id,但随后我获取了所有字段 这就是rails在我们急切加载时的行为方式,还是我在这里遗漏了什么?在您的情况下,您将获得所有公司用户,而不是组织 急切加载意味着预加载数据库行。它不会只获取属性。它加载所有关联行 例如: comments = Comment.all(:sele

我有一个这样的疑问

company.users.select("users.id, users.state").includes(:organization)
在这里,我渴望加载协会
组织
。我希望在对象中获取属性id和用户id,但随后我获取了所有字段


这就是rails在我们急切加载时的行为方式,还是我在这里遗漏了什么?

在您的情况下,您将获得所有公司用户,而不是组织

急切加载意味着预加载数据库行。它不会只获取属性。它加载所有关联行

例如:

 comments = Comment.all(:select => "users.name,comment_text", :include => :user)

在这里,它将不仅仅从用户表中加载名称。它将从数据库中获取所有用户行。因此,您不必发出额外的查询。还有一件事是,当您使用
include
select子句时,当您具有包含的表的属性时,它将被忽略。有关更多信息,请查看ryan bates rialscast on joins vs include:

在上述查询中,如果comments表有20条记录和10列,它将加载所有记录,但如果我只需要这20条记录中的2列,我该如何做??对于我提到的问题,我无法回答do@ManjunathManohar“对不起,”ManjunathManohar交叉核对。使用“急加载”时,将忽略select子句。如果您使用“加入选择”将起作用。@ManjunathManohar在您的情况下,当您只需要
id和用户id
时,为什么要急于加载
organization
。id和用户id属于组织。你能解释一下什么是公司表中的
id和user\u id
id和user\u id吗