Active und Mongo / Mongo-Mapper Brücke
-
20-09-2019 - |
Frage
Ich habe ein Projekt, das ich Active Record verwendet habe und die ich mag einige neue Features mit MongoDB hinzuzufügen. Anstatt neu erfinden das Rad und neu zu schreiben meine gesamte Website, wie kann ich integrieren 2 Modelle zusammen, eine, die MongoMapper und die anderen Active (Postgres) zu verwenden.
Ich habe festgestellt, dass andere haben es erfolgreich getan, aber keine Beispiele:
Zum Beispiel, ich habe ein STI Mongo Modell (e) von Orten, die ich zu einem bestehenden Active Modell der Standorte beziehen will ... also Städte. und ein User-Modell basiert auf Authlogic ... wie kann ich sie im Konzert? Ich würde für einen Zeiger oder zwei in der richtigen Richtung dankbar.
Danke,
Lösung
Das funktioniert schön
legt Modell
key :location_id, Integer, :required => true
def location
Location.find(location_id)
end
Standorte Modell
def self.find_places(id)
Property.find_by_location_id(id)
end
def find_places
Property.find_by_location_id(id)
end
Andere Tipps
Sie können auch eine Schublade gesteckt verwenden.
Statt nur die location_id in mongodb speichern, können Sie Klassenmethoden implementieren, from_mongo
und to_mongo
, in der Location-Klasse mongomapper zu ermöglichen, jede Lage etwa in einem Mongo sichere und freundliche Weise serialisiert werden.
Simple (ISTC) Beispiel:
Orte Modell
key :location, Location, :required => true
Standort-Modell
def self.to_mongo(location)
location[:id]
end
def self.from_mongo(location_id)
find(location_id)
end
Dies ist natürlich genau das gleiche Beispiel wie in der vorherige Antwort. Die kühle Sache ist, dass Sie eine vollständige Zeichenfolge serialisiert werden können, mit mehr Daten, wenn nötig, damit es leichter zu Abfrage machen und Abrufen von Daten aus Mongo.
Zum Beispiel der location_id und Koordinaten, so dass Sie ein GeoDB nachahmen können und Map / Reduce nach Orten in der gleichen Breite. (Dumm Beispiel, ich weiß)
Referenz: Mehr MongoMapper Awesomenes