D'accord, je suis complètement perplexe sur celui-ci. J'essaye de construire un menu de pages Web publiées organisées par catégorie.Rails 3 - Envie de chargement avec des conditions
Category.rb:
belongs_to :parent, :class_name => "Category", :foreign_key => "parent_id"
has_many :children, :class_name => "Category", :foreign_key => "parent_id"
has_many :pages, :documents, :galleries
Page.rb
belongs_to :category
Le modèle Page a également: is_published, donc je suis en train de filtrer aussi. Je suis réticent à poster mes faibles tentatives de requête, mais ne vois pas d'autre solution que de demander la charité beaucoup plus intelligente:
(auto est @current_website)
self.categories.includes(:children, :pages).where('pages.is_published = 1')
Cela renvoie la plupart du temps ce que j'ai besoin, mais pas des parents Catégories sans pages publiées. Par exemple, il fonctionne très bien si j'ai:
Parent Category
- Published Page
- Child Category
-- Published Page
Lorsqu'il échoue est quand je n'ai pas les pages publiées dans le parent, comme celui-ci:
Parent Category
- Child Category
-- Published Page
- Child Category
-- Published Page
Merci à l'avance pour toute aide à ce sujet. J'essaie d'en apprendre le plus possible sur les requêtes, mais je suis contre le mur à ce sujet.
MISE À JOUR: La suggestion de mise en œuvre KandadaBoggu a donné de bien meilleurs résultats, cela a été ajouté à Category.rb
has_many :published_pages, :class_name => "Page",
:conditions => {:is_published => true}
Cependant, lorsque vous utilisez les éléments suivants:
self.categories.where(:parent_id => nil).includes({:children => :published_pages},
:published_pages)
j'obtenir les résultats dont j'ai besoin, mais je reçois également des catégories parent vides (pas de pages publiées, pas de catégories enfants avec des pages publiées.) Un exemple:
- Parent Category
-- Published Page
- Parent Category
-- NOTHING
- Parent Category
-- Published Page
- Parent Category
-- NOTHING
Mon solution temporaire était joint la requête avec:
reject{|category| category.pages.empty? && category.children.empty?}
Merci encore pour votre aide.
Merci pour la plus excellente écriture-up, lien et explication, KandadaBoggu! Cela m'a certainement mis sur la bonne voie, j'ai toujours un problème avec self.categories.includes (: children =>: published_pages,: published_pages) fournissant aux parents sans pages ou catégories d'enfants avec des pages. MERCI ENCORE! – TMB
Mettez à jour votre question et spécifiez votre besoin de présence/absence de pages. –
Merci énormément utile - tirait mes cheveux – jpwynn