activerecord y mongo / mongo-asignador de puente
-
20-09-2019 - |
Pregunta
Tengo un proyecto que he utilizado Active Record, y que me gustaría añadir algunas nuevas características usando MongoDB. En lugar de reinventar la rueda y volver a escribir toda mi sitio, ¿cómo puedo integrar 2 modelos juntos, uno que utilizan MongoMapper y los otros ActiveRecord (postgres).
He encontrado que otros lo han hecho con éxito, pero no hay ejemplos:
Por ejemplo, tengo un modelo STI Mongo (s) de Lugares que quiero relacionar con un modelo ActiveRecord existente de Ubicaciones ... es decir, las ciudades. y un modelo de usuario basado en Authlogic ... cómo puedo usar en concierto? Estaría agradecido por un puntero o dos en la dirección correcta.
Gracias,
Solución
Esto funcionó muy bien
lugares modelo
key :location_id, Integer, :required => true
def location
Location.find(location_id)
end
ubicaciones modelo
def self.find_places(id)
Property.find_by_location_id(id)
end
def find_places
Property.find_by_location_id(id)
end
Otros consejos
También puede utilizar encasillamiento.
En lugar de simplemente almacenar el location_id en mongodb, se puede aplicar a métodos de clase, y from_mongo
to_mongo
, en la clase Location para permitir MongoMapper para serializar cada instancia Localización de una manera segura y amigable mongo.
Simple (ISTC) ejemplo:
modelo lugares
key :location, Location, :required => true
Lugar modelo
def self.to_mongo(location)
location[:id]
end
def self.from_mongo(location_id)
find(location_id)
end
Esto, por supuesto, es exactamente el mismo ejemplo que en la respuesta anterior. Lo interesante aquí es que se puede serializar una cadena completa, con más datos, si es necesario, por lo que es más fácil de consultar y recuperar datos de Mongo.
Por ejemplo, el location_id y las coordenadas, por lo que puede imitar un GeoDB y map / reduce de lugares en la misma latitud. (Estúpida ejemplo, sé)
Referencia: Más MongoMapper Awesomenes