【问题标题】:Rails 3 - Eager loading on a legacy databaseRails 3 - 旧数据库上的急切加载
【发布时间】:2010-08-04 06:42:59
【问题描述】:

我继承了一个包含以下表格的网络应用程序:类别、子类别和页面。页面有 category_id 和 sub_category_id 列。

我需要编写一个高效的查询来按类别和子类别急切加载页面,以便在我的视图中进行迭代(粗略示例如下):

- Category One (categories.each do |category|...)
-- Page One    (category.pages.each do |page|...)
-- SubCategory One (category.sub_categories.each do |sub_category|...
---- Page Two (sub_category.pages.each do |page|...)

类别.rb:

class Category < ActiveRecord::Base 
  has_many :pages
  has_many :sub_categories
end

子类别.rb:

class SubCategory < ActiveRecord::Base
  belongs_to :category
  has_many :pages
end

Page.rb:

class Page < ActiveRecord::Base
  belongs_to :category
  belongs_to :sub_category

  scope :active_pages, :conditions => {:is_active => true}
end

我已经尝试过以下查询,但在涉及 sub_categories 时收效甚微:

Category.includes(:sub_categories, :pages).where('pages.is_active = 1')

类别效果很好,但我不确定如何预先加载 sub_categories。提前致谢,非常感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    根据this article,我只是在看这样的东西可能会做你想做的事:

    Category.find( :all, :include => [ :pages, { :sub_categories => :pages } ] )
    

    【讨论】:

    • 谢谢,诺埃尔。这就像一个魅力(我重写了 Activerecord 3 的语法)并且渲染从 1200 毫秒到 200 毫秒。再次感谢。
    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多