2010-08-04 3 views
0

J'ai hérité d'une application Web avec les tables suivantes: Catégories, Sous-catégories et Pages. Pages a des colonnes category_id et sub_category_id.Rails 3 - Chargement en cours sur une base de données existante

J'ai besoin d'écrire une requête efficace pour les pages de charge désireux par catégorie et sub_category pour itérer à mon avis (exemple brut ci-dessous):

- 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|...) 

Category.rb:

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

Sous-catégorie. 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 

J'ai expérimenté avec des requêtes comme le sont concernés suivants avec peu de succès où les sub_categories:

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

Catégories fonctionne très bien, mais je ne suis pas sûr de savoir comment désireux charge les sub_categories. Merci d'avance, toute aide est grandement appréciée.

Répondre

0

selon this article que je regardais juste quelque chose comme ça pourrait faire ce que vous voulez:

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

Merci, Noel. Cela a fonctionné comme un charme (j'ai réécrit la syntaxe pour Activerecord 3) et le rendu est passé de 1200ms à 200ms. Merci encore. – TMB

+0

Il y a une nouvelle syntaxe pour Active Record 3 ???? Pourquoi on ne m'en a pas parlé? :) –

Questions connexes