activerecord et mongo / pont mongo-mapper
-
20-09-2019 - |
Question
J'ai un projet que je l'ai utilisé Active Record et que je voudrais ajouter quelques nouvelles fonctionnalités en utilisant MongoDB. Plutôt que de réinventer la roue et ré-écrire tout mon site, comment puis-je intégrer 2 modèles ensemble, un qui utilisent MongoMapper et les autres ActiveRecord (postgres).
J'ai trouvé que d'autres l'ont fait avec succès, mais pas d'exemples:
Par exemple, j'ai un modèle STI Mongo (s) des lieux que je veux rapporter à un modèle existant ActiveRecord des emplacements ... à savoir les villes. et un modèle utilisateur basé sur Authlogic ... Comment puis-je les utiliser en concert? Je serais reconnaissant pour un pointeur ou deux dans la bonne direction.
Merci,
La solution
a fonctionné à merveille
endroits modèle
key :location_id, Integer, :required => true
def location
Location.find(location_id)
end
modèle emplacements
def self.find_places(id)
Property.find_by_location_id(id)
end
def find_places
Property.find_by_location_id(id)
end
Autres conseils
Vous pouvez également utiliser transtypage.
Au lieu de stocker les location_id dans MongoDB, vous pouvez mettre en œuvre des méthodes de classe, from_mongo
et to_mongo
, dans la classe d'emplacement pour permettre mongomapper sérialiser chaque instance d'emplacement dans une mongo manière sûre et conviviale.
Exemple simple (ISTC):
modèle Places
key :location, Location, :required => true
modèle Emplacement
def self.to_mongo(location)
location[:id]
end
def self.from_mongo(location_id)
find(location_id)
end
Ceci, bien sûr, est exactement le même exemple que dans la réponse précédente. La chose est cool ici que vous pouvez sérialiser une chaîne complète, avec plus de données en cas de besoin, rendant ainsi plus facile de rechercher et de récupérer des données à partir mongo.
Par exemple, le location_id et les coordonnées, vous pouvez imiter un GeoDB et map / reduce pour des places dans la même latitude. (Exemple stupide, je sais)
Référence: Plus mongomapper Awesomenes