Lassen Sie uns sagen, dass wir diese Modelle habenSchienen polymorphen mit auf Klassentyp basiert umfasst
class Message
belongs_to :messageable, polymorphic: true
end
class Ticket
has_many :messages, as: :messageable
has_many :comments
end
class User
has_many :messages, as: :messageable
has_many :ratings
end
class Rating
belongs_to :user
end
class Comment
belongs_to :ticket
end
Jetzt möchte ich alle Nachrichten laden (die tickets
oder users
zugeordnet haben), und eifrig Last abhängig von der Art der Klasse entweder, comments
für tickets
und ratings
für users
natürlich Message.includes(:messageable).order("created_at desc")
enthält nur die direkt zugeordnete Objekt, aber die Frage wäre, wie die verschiedenen Zuordnungstypen umfassen, die von jedem Modell ableiten Typ (d.h. in diesem Beispiel, wie man eifrig lädt comments for tickets
und ratings for users
)?
Dies ist nur ein einfaches Beispiel, aber was ist mit noch komplizierteren Fällen, wo ich gerne etwas anderes für die user
, eine andere Assoziation, und was, wenn diese Assoziation mehr beinhaltet?
Haben Sie gefunden, eine Lösung? –
Ich tat es tatsächlich manuell. Rufen Sie die Nachrichten ab, und ziehen Sie für jeden Nachrichtentyp die Zuordnungen mit den entsprechenden Includes, und fügen Sie sie dann wieder in das Nachrichtenarray ein. Es ist nicht schön, aber es funktioniert –
teilen Sie Ihre Antwort? – coderVishal