Wie werden ActiveRecord-Objekte kombiniert?

8

Ich frage mich, ob es eine effiziente Möglichkeit gibt, die Ergebnisse mehrerer ActiveRecord-Objekte in Rails zu kombinieren. Zum Beispiel könnte ich drei individuelle Aufrufe an drei einzelne Tabellen machen, und ich möchte, dass die Ergebnisse kombiniert und nach einer gemeinsamen Spalte sortiert werden.

Hier ist ein Beispiel für einen super Basiscode, das meine Frage hoffentlich leichter verständlich macht:

%Vor%

Wie von anderen vorgeschlagen, hier ist eine Lösung für das Problem.

%Vor%

Was ist, wenn ich nach Datum sortieren möchte, aber Tabelle 3 verweist auf die Spalte "created_on" als Datum?

    
Jess 02.07.2009, 17:47
quelle

7 Antworten

14
%Vor%

Was ist, wenn ich nach Datum sortieren möchte, aber Tabelle3 verweist auf die Spalte "created_on" als Datum?

%Vor%

oder einfach

%Vor%     
Lars Haugseth 02.07.2009 18:29
quelle
2

Sie arbeiten nicht mit "Tabellen", sondern mit Objekten.

Wenn Sie so darüber nachdenken, würde es keinen Sinn haben:

%Vor%

Was würde die "kombinierte" Form davon bedeuten?

Was Sie wahrscheinlich wollen, ist, Ergebnisse der gleichen Art mit verschiedenen "Abfragen" zu kombinieren. Ist es das?

    
Carlos Lima 02.07.2009 17:52
quelle
1

Sie werden diese Antwort wahrscheinlich nicht mögen, aber ich würde sagen, Sie möchten vielleicht Ihr Datenbankschema überarbeiten. Ich war in einer ähnlichen Situation und das Sortieren der Ergebnisse nach der Verkettung ist definitiv nicht die Art, wie Sie gehen wollen.

    
FlemishBeeCycle 03.07.2009 07:02
quelle
0
%Vor%     
Ethan 02.07.2009 17:55
quelle
0
%Vor%

Obwohl dies sicherlich nicht der effizienteste Code der Welt ist, könnte es genau das sein, was Sie brauchen.

Wenn einige Modelle keine Datumsmethode haben, schlage ich vor, dass Sie eine erstellen. Es ist so einfach wie.

%Vor%     
nasmorn 02.07.2009 17:53
quelle
0

Ich gehe davon aus, dass Sie ein gemischtes Array von drei verschiedenen ActiveRecord-Objekten haben möchten, die nach einem Datum sortiert sind.

%Vor%

Da Ihr sort_by-Feld für jeden Objekttyp unterschiedlich ist, müssen Sie es definieren.

%Vor%

Sie könnten alle Daten in einer einzigen Abfrage mit UNION einlesen, aber Sie würden keine AR-Objekte daraus erhalten.

    
Michael Sofaer 03.07.2009 21:14
quelle
0

Ich bin mir nicht sicher, wie Ihre Datenvolumina aussehen, aber wenn es um das Sortieren geht, wird Ihre Datenbank eine bessere Arbeit leisten, als Sie jemals mit "Anwendungsschicht" -Code tun werden.

Benötigen Sie die zurückgegebenen Daten als Array von Modellobjekten, da die drei Tabellen wahrscheinlich ein gemischtes Array von drei verschiedenen Modellklassen generieren?

Warum verwenden Sie nicht Direct-SQL, das Zeilen und Spalten zurückgibt, und lässt die DB die Daten sortieren?

    
Ijonas 02.07.2009 19:15
quelle