2010-08-18 58 views
1

在写一些应用程序供个人使用时。我发现子查询不如它的样子。Rails子对象查询导致N + 1问题

举例来说,我有2个对象

Category has_many Files 
File belongs_to Category 

File.category将访问它的父类。但是这导致了着名的N + 1问题。

例如,我想我的主页,列出20页最新的文件和使用相应类别像这样

for file in @files 
    %p 
    = file.name 
    = file.category.name 

我应该怎么解决这个问题呢?

回答

6
@files = File.find(:all, :limit => 20, :order => "created at desc", :include => :category) 
2

在你的find如果你说:include => :category那么这将为你加载类别,并避免单独的查询检索每个类别的名称。因此,对于您可以执行的20个最新文件的示例:

@files = File.find :all, :limit => 20, :include => :category, 
    :order => 'created at desc'