您如何热切限制加载?
|
在急切加载的文档中指出:
如果您渴望使用指定的:limit选项加载关联,则它将被忽略,并返回所有关联的对象:
class Picture < ActiveRecord::Base
has_many :most_recent_comments, :class_name => \'Comment\',
:order => \'id DESC\', :limit => 10
end
Picture.find(:first,:include =>:most_recent_comments).most_recent_comments#=>返回所有关联的注释。
如果是这种情况,那么达到加载限制的最佳方法是什么?
假设我们渴望将最后10个博客帖子加载到博客的首页上,我们显然不希望全部都这样,那么应该指定帖子集合的限制和顺序吗?
除此之外,是否可以在深度加载的元素上指定相同的条件-例如,仅在每个博客文章上显示前三个评论?
Blog.find(:blog_id, :include => {:posts => :comments } )
没有找到相关结果
已邀请:
3 个回复
敦肌
命令不能很好地转换为您要执行的操作。
将限制查询返回的总行数。您虽然没有尝试这样做。您试图限制返回的每张图片的连接行数。为了获得这种效果,您必须使用一些复杂的SQL,如果表很大,则可能很难对其进行优化。到那时,我会考虑为什么您要限制渴望加载的行。 如果渴望加载的注释的最大数量是可管理的(<2000左右),则您可能不必担心在SQL端进行限制。 如果您只加载10个帖子,那么我将考虑根本不希望加载。我不希望额外的10个查询会大大降低速度,而它们添加的时间是可以尝试其他优化技术(例如缓存)来弥补的。 您应该让示波器为您完成肮脏的工作,而不是关联。这提高了可重用性,可维护性和可读性。例:
这样一来,当您需要
时,就可以像这样将其范围缩小:
岭取
)的问题,因为我必须一次加载许多关联的模型而无需使用
或(无will_paginate(使用
)
...尝试一下。希望有帮助。
断跑胺弄萎
在AR指南中查看更多