2010-02-13 3 views
1

У меня есть проект, в котором я использовал Active Record, и который хотел бы добавить некоторые новые функции с помощью MongoDB. Вместо того, чтобы повторно изобретать колесо и переписывать весь мой сайт, как я могу объединить две модели вместе, которые используют MongoMapper и другие ActiveRecord (postgres).activerecord and mongo/mongo-mapper bridge

Я обнаружил, что другие сделали это успешно, но нет примеров:

http://groups.google.com/group/mongomapper/browse_thread/thread/ec5ad00e18e7dd2c/887b8b0b904a8f73?lnk=gst&q=activerecord#887b8b0b904a8f73

К примеру, у меня есть модель STI Монго (ы) Места, которые я хочу связать с существующим Модель местоположений ActiveRecord ... т.е. городов. и модель пользователя, основанная на Authlogic ... как я могу использовать их на концертах? Я был бы благодарен за указатель или два в правильном направлении.

Спасибо,

ответ

2

Это работало красиво

места модели модель

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 
1

Вы также можете использовать типажей.

Вместо того, чтобы просто хранить LOCATION_ID в MongoDB, можно реализовать с методами класса, from_mongo и to_mongo, в классе Location, чтобы mongomapper сериализовать каждый экземпляр Расположение в Монго безопасной-и-дружески.

Простой (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 и координаты, поэтому вы можете имитировать геодб и отображать/уменьшать места в одной и той же широте. (глупый пример, я знаю)

Справка: More MongoMapper Awesomenes