Mysql
 sql >> Base de données >  >> RDS >> Mysql

Rails 3 - Chargement hâtif avec conditions

Ajouter une nouvelle association appelée published_pages (en dehors de vos associations actuelles)

class Category

  has_many   :children,        :class_name => "Category", 
               :foreign_key => "parent_id"
  has_many   :published_pages, :class_name => "Page", 
               :conditions  => { :is_published => true }

end

Vous pouvez maintenant obtenir toutes les catégories comme suit :

self.categories.includes(:children, :published_pages)

Si vous souhaitez savoir pourquoi votre approche n'a pas fonctionné, lisez la documentation (faites défiler 10-15 lignes après le Eager loading of associations section). J'ai inclus l'extrait pertinent ci-dessous :

Pour charger rapidement les lignes filtrées d'une association, utilisez une association avec des conditions :

class Post < ActiveRecord::Base
  has_many :approved_comments, :class_name => 'Comment', 
             :conditions => ['approved = ?', true]
end

Post.find(:all, :include => :approved_comments)