Ruby on rails 如何在Rails中自动包含关联以停止不必要的查询?

Ruby on rails 如何在Rails中自动包含关联以停止不必要的查询?,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,我有一个用户,它有一个用户档案。每个用户都有经验点。现在我必须加载前10名用户并显示他们的性别照片。但是性别在用户档案模型中。如何立即获取用户档案?我正在处理比我认为必要的更多的查询。基本上,我想要一个select*从用户那里,user\u profile.user\u id=user.id或者类似的东西,所以当我需要获取user.user\u profile.sex时,我不再查询数据库。我该怎么做 当前正在模型中尝试User.order(“experience DESC”).limit(lim

我有一个
用户
,它有一个
用户档案
。每个用户都有经验点。现在我必须加载前10名用户并显示他们的性别照片。但是性别在
用户档案
模型中。如何立即获取
用户档案
?我正在处理比我认为必要的更多的查询。基本上,我想要一个
select*从用户那里,user\u profile.user\u id=user.id
或者类似的东西,所以当我需要获取
user.user\u profile.sex
时,我不再查询数据库。我该怎么做


当前正在模型中尝试
User.order(“experience DESC”).limit(limit).offset(offset).joins(:User\u profile)
,但当我在视图中查询User.User\u profile.sex时,我仍会进行查询。

您要查找的是“包含”,如中所述


Includes允许即时加载,将1+n数据库调用减少为2个调用…

您正在寻找的是所谓的“即时加载”,默认情况下一对一关联是即时加载的,但您最好检查一下。
在多对一或多对多的情况下,您可以通过如下命令显式请求即时加载:

Client.includes(:address).find(some_id)
# or any other query like
Client.includes(:address).where(id: some_id, name: "Some Name")
如果您希望始终使用即时加载,而不在模型中明确指定它,则应编写:

class Customer < ActiveRecord::Base
  has_many :orders, -> { includes :line_items }
end
class客户{包括:行项目}
结束

可以找到更多的示例,并且

连接更改为
包括
Wow-man,谢谢。我还添加了将来使用的范围。我应该多读些指南!