activerecord и мост mongo/mongo-mapper
-
20-09-2019 - |
Вопрос
У меня есть проект, в котором я использовал Active Record и в который я хотел бы добавить некоторые новые функции с помощью MongoDB.Вместо того, чтобы заново изобретать велосипед и переписывать весь свой сайт, как мне объединить две модели, одну, которая использует MongoMapper, а другую ActiveRecord (postgres).
Я обнаружил, что другие сделали это успешно, но примеров нет:
Например, у меня есть модель(и) мест STI Mongo, которую я хочу связать с существующей моделью местоположений ActiveRecord...то есть города.и модель пользователя на основе Authlogic...как я могу использовать их на концерте?Буду признателен за пару указателей в правильном направлении.
Спасибо,
Решение
Это сработало прекрасно
модель места
key :location_id, Integer, :required => true
def location
Location.find(location_id)
end
Модель локаций
def self.find_places(id)
Property.find_by_location_id(id)
end
def find_places
Property.find_by_location_id(id)
end
Другие советы
Вы также можете использовать приведение типов.
Вместо того, чтобы просто хранить location_id в mongodb, вы можете реализовать методы класса, from_mongo
и to_mongo
, в классе Location, чтобы позволить mongomapper сериализовать каждый экземпляр Location безопасным и удобным способом mongo.
Простой (istc) пример:
Модель мест
key :location, Location, :required => true
Модель местоположения
def self.to_mongo(location)
location[:id]
end
def self.from_mongo(location_id)
find(location_id)
end
Это, конечно, точно такой же пример, как и в предыдущем ответе.Самое интересное здесь то, что вы можете сериализовать полную строку с дополнительными данными, если это необходимо, что упрощает запрос и получение данных из mongo.
Например, location_id и координаты, чтобы вы могли имитировать геоданную базу данных и отображать/уменьшать места на одной и той же широте.(глупый пример, я знаю)