ActiveRecord e Mongo / Mongo-Mapper Bridge
-
20-09-2019 - |
Pergunta
Eu tenho um projeto que usei registro ativo e que gostaria de adicionar alguns novos recursos usando o MongoDB. Em vez de reinventar a roda e reescrever todo o meu site, como posso integrar 2 modelos juntos, um que usa MongoMapper e o outro ActiveRecord (Postgres).
Descobri que outros fizeram isso com sucesso, mas sem exemplos:
Por exemplo, eu tenho um modelo (s) STI Mongo (s) de lugares que eu quero relacionar com um modelo de locais do ActiveRecord existente ... ou seja, cidades. E um modelo de usuário baseado no Authlogic ... como posso usá -los em concerto? Eu ficaria grato por um ponteiro ou dois na direção certa.
Obrigado,
Solução
Isso funcionou lindamente
Modelo de lugares
key :location_id, Integer, :required => true
def location
Location.find(location_id)
end
Modelo de locais
def self.find_places(id)
Property.find_by_location_id(id)
end
def find_places
Property.find_by_location_id(id)
end
Outras dicas
Você também pode usar o TypeCasting.
Em vez de apenas armazenar o local_id no MongoDB, você pode implementar os métodos de classe, from_mongo
e to_mongo
, na aula de localização, para permitir que o MongoMapper serialize cada instância de localização de uma maneira segura e amigável de Mongo.
Exemplo simples (istc):
Modelo de lugares
key :location, Location, :required => true
Modelo de localização
def self.to_mongo(location)
location[:id]
end
def self.from_mongo(location_id)
find(location_id)
end
É claro que este é exatamente o mesmo exemplo da resposta anterior. O legal aqui é que você pode serializar uma sequência completa, com mais dados, se necessário, facilitando a consulta e a recuperação de dados do Mongo.
Por exemplo, o Location_ID e as coordenadas, para que você possa imitar um geodb e mapear/reduzir para locais na mesma latitude. (Exemplo estúpido, eu sei)
Referência: Mais impressionantes os que não são degradados