De acuerdo, estoy completamente perplejo en este caso. Intento crear un menú de páginas web publicadas organizadas por categoría.Rieles 3 - Ansioso de cargar con las condiciones
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
El modelo también ha Página: is_published, por lo que estoy tratando de filtrar en eso también. Soy reacio a publicar mis intentos de consulta débiles, pero no ven otra solución que mendigar la gente mucho más inteligente:
(auto es @current_website)
self.categories.includes(:children, :pages).where('pages.is_published = 1')
Esto devuelve sobre todo lo que necesito, pero no los padres Categorías sin páginas publicadas Por ejemplo, funciona muy bien si tengo:
Parent Category
- Published Page
- Child Category
-- Published Page
donde falla es cuando no tengo las páginas publicadas en el padre, así:
Parent Category
- Child Category
-- Published Page
- Child Category
-- Published Page
Gracias de antemano por cualquier ayuda en esto. Estoy tratando de aprender todo lo que puedo sobre las consultas, pero estoy contra la pared en esto.
ACTUALIZACIÓN: La sugerencia de Ejecución KandadaBoggu ha dado resultados mucho mejores, esto se añadió a Category.rb
has_many :published_pages, :class_name => "Page",
:conditions => {:is_published => true}
Sin embargo, cuando se usa el siguiente:
self.categories.where(:parent_id => nil).includes({:children => :published_pages},
:published_pages)
consigo los resultados que necesito, pero también obtengo Categorías padre vacías (sin páginas_publicadas, sin categorías secundarias con páginas publicadas. Un ejemplo:
- Parent Category
-- Published Page
- Parent Category
-- NOTHING
Mi arreglo temporal fue anexado a la consulta con:
reject{|category| category.pages.empty? && category.children.empty?}
Gracias de nuevo por su ayuda.
Gracias por la más excelente reportaje, enlace y explicación, KandadaBoggu! Esto ciertamente me ha puesto en el camino correcto, todavía tengo un problema con self.categories.includes (: children =>: published_pages,: published_pages) que entrega padres sin páginas o categorías de niños con páginas. ¡GRACIAS DE NUEVO! – TMB
Actualice su pregunta y especifique su requisito w.r.t a presencia/ausencia de páginas. –
Fantasicamente útil gracias, me sacaba el pelo – jpwynn