Rekursiv: Include in Rails - Ruby-on-Rails, include, Polymorphismus

Ich habe ein polymorphes Modell, das sich selbst zuordnen kann:

class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable
end

Diese Beziehungen funktionieren einwandfrei, außer wenn ich versuche, den gesamten Stammbaum von Kind / Eltern - Kommentaren durch einen include Erklärung:

Post.find(1).include(:comments)

Dies schließt nur die Kommentare ein, die direkt mit dem Post verknüpft sind. Ich könnte vielleicht eine zweite Ebene abrufen mit:

Post.find(1).include(comments: :comments)

Aber was, wenn ich alle Kommentare von der Post abholen wollte, egal wie tief sie verschachtelt sind? Ist das möglich?

Antworten:

2 für die Antwort № 1

Anscheinend möchten Sie eine Adjazenzliste abrufen. Rails hat keine direkte Unterstützung dafür, aber wenn Sie postgresql verwenden, können Sie den Operator "WITH RECURSIVE" verwenden.

Das Plugin kümmert sich darum: https://github.com/chrisroberts/acts_as_sane_tree

Andernfalls können Sie ganz einfach Ihre eigene postgresql-Funktion erstellen (in einer Migration deklarieren) und sie dann in Ihren Abfragen verwenden. Schau dir an: http://wiki.postgresql.org/wiki/Getting_list_of_all_children_from_adjacency_tree

WITH RECURSIVE ist derzeit nicht in mysql oder sqlite3 implementiert.


Verwandte Fragen
Speisekarte