代码之家  ›  专栏  ›  技术社区  ›  DucDigital

Rails子对象查询导致N+1问题

  •  1
  • DucDigital  · 技术社区  · 14 年前

    写一些个人申请的时候。我发现孩子的问题并没有看上去那么好。

    例如,我有两个对象

    Category has_many Files
    File belongs_to Category
    

    file.category将访问其父类别。但这导致了著名的N+1问题。

    例如,我希望我的主页列出20个最新的文件及其相应的类别,如下所示

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

    我该如何解决这个问题?

    2 回复  |  直到 14 年前
        1
  •  6
  •   mark    14 年前
    @files = File.find(:all, :limit => 20, :order => "created at desc", :include => :category)
    
        2
  •  2
  •   mikej heading_to_tahiti    14 年前

    在你 find 如果你说 :include => :category 然后,这将迫切地为您加载类别,并避免使用单独的查询来检索每个类别的名称。因此,对于20个最新文件的示例,您可以执行以下操作:

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