2012-01-05 13 views
5

que tienen un modelo de auto-unió:autoensamblarse ansioso de cargar recursivamente?

class Comment < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'Comment', :foreign_key => 'parent_id' 
    has_many :children, :class_name => 'Comment', :foreign_key => "parent_id" 
end 

Posteriormente deseo hacer la primera llamada 1 sql para agarrar todas las observaciones pertinentes y, a continuación, de forma recursiva hacerlos.

¿Cómo puedo esperar de forma recursiva?

comments = Comment.where(:post_id => @post_id).includes(:comments=> [:comments => [:comments .... #How do I get this to recursively eager load? 

def show_comments(comment) 
    render comment 
    comment.children.each do |child| 
     show_comments(child) 
    end 
end 
+0

¿No debería ser 'show_comments (child)'? – Finbarr

+0

Oh, sí, probablemente haya errores tipográficos en el código, solo tiene la intención de presentar una idea general de lo que quiero. –

+0

en pocas palabras: no se puede. Aconsejaría usar [awesome_nested_set] (https://github.com/collectiveidea/awesome_nested_set) o [ancestry] (https://github.com/stefankroes/ancestry) que son implementaciones diferentes que abordan este problema (estructuras profundamente anidadas en una sola mesa) –

Respuesta

3

Se puede crear un método que recupera la profundidad de anidamiento de las identificaciones, cargar esos, y los carriles de la usarán como una memoria caché.

Cuestiones relacionadas