2017-07-16 8 views
0

Wir haben 2 Tabellen von Modellen, die die gleichen Abfragen teilen, aber da wir sie separat abfragen, kann Paging Kopfschmerzen sein.Zwei separate Modelle, benötigen Einheit

Wir haben das Videomodell und das Bildmodell. Wenn wir sie also basierend auf dem Erstellungsdatum abrufen möchten, müssen wir zwei Abfragen separat ausführen und sie dann erneut vereinheitlichen, neu sortieren und erneut begrenzen. Die Kopfschmerzen sind, wenn Pagination auch, wir brauchen 2 separate Offsets für jeden.

Sie bekommen den Punkt. Wir wollen sie irgendwie vereinheitlichen. Das Problem ist, dass sie so in unserer komplexen Anwendung verwurzelt sind, dass wir sie nicht in einem großen Tisch vereinen können. Wir haben uns gefragt, welche Art von Lösung ActiveRecord hat, wenn überhaupt, um eine einzige Tabelle zu verwalten, die auf zwei getrennte Modelle verweist, wo Abfragen zusammen ausgeführt werden können. Vielleicht sollten wir eine große Assets-Tabelle erstellen, wo sie eine eigene ID und eine Referenz-ID für das bestimmte Modell hat?

Danke!

Antwort

1

ActiveRecord :: NestedAttributes könnte für Sie arbeiten.

class Video has_one: image accepts_nested_attributes_for :image end

params = { video: { name: 'video', image_attributes: { icon: 'image' } } } video = Video.create(params[:video]) video.avatar.icon # => 'image'

Für weitere Informationen: Check this link.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/16727957) – Grandpa

+1

Fertig. Danke für die Info –

0

Ich weiß nicht, welche Datenbank Sie verwenden, aber ich konfrontiert ähnliches Problem und SQL-Ansichten schien die Lösung zu sein. Erstellen Sie einfach eine Ansicht, die diese beiden Tabellen in der Migrationsdatei vereint, und ein neues Modell, das sowohl Bilder als auch Videos darstellt. In Ihrem Modell benötigen Sie Tabellennamen und Primärschlüssel angeben:

self.primary_key = :id 
self.table_name = 'name_of_your_view' 

Active wird diese Ansicht als eine normale Tabelle behandeln. Vielleicht ist die Leistung nicht so gut wie wenn Sie eine echte Tabelle haben, aber viel besser, als alles in den Speicher zu laden, zu sortieren und zu paginieren.

+0

Ich dachte darüber nach, aber ich bevorzuge es nicht, da die Spalten ständig zwischen den Modellen wechseln, verlangen, dass ich die Ansicht ändere – Himberjack

Verwandte Themen