Ale*_*lex 10 lazy-loading model-associations mongoid ruby-on-rails-3
出于性能原因,我only()
在编写mongoid查询时尽可能多地使用关键字来指定我要加载的字段.
通常的嫌疑人,例如,当我想要所有管理员的用户电子邮件仅用于显示目的时.
我会写:
User.where(:groups => :admins).only(:email).each do |u|
puts u.email
end
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我的用户模型中充满了很多数据,在列出一堆电子邮件时我很乐意忽略这些数据.
但是,现在让我们想象一下,我的用户是通过Project模型引用的,因此对于我可以做的每个项目:project.user
.由于mongoid的延迟加载,我的对象用户只有在调用引用时才会被实例化(并从数据库中查询).
但是,如果我想列出所有管理项目所有者的所有电子邮件呢?
我会写这个:
Project.where(:admin_type => true).each do |p|
puts p.user.email
end
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是,这样做,我为每个项目加载整个用户对象,如果有很多项目匹配查询可能会变得非常沉重.那么我该如何只加载电子邮件呢?
我能做到这一点:
User.where(:_id => p.user_id).only(:email).first.email
Run Code Online (Sandbox Code Playgroud)
但这显然打败了简单做法的好语法的目的:
p.user.email
Run Code Online (Sandbox Code Playgroud)
我希望我能写出类似的东西:p.user.only(:email).email
但我不能.有任何想法吗 ?
亚历克斯
归档时间: |
|
查看次数: |
3230 次 |
最近记录: |