activerecord和mongo / mongo-mapper网桥

时间:2010-02-13 19:09:02

标签: postgresql activerecord mongodb heroku mongomapper

我有一个项目,我使用Active Record,我想使用MongoDB添加一些新功能。我不是重新发明轮子并重新编写我的整个网站,而是如何将2个模型集成在一起,一个使用MongoMapper,另一个使用ActiveRecord(postgres)。

我发现其他人已成功完成,但没有例子:

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

例如,我有一个STI Mongo模型的地方,我想与现有的ActiveRecord地点模型相关联......即城市。和基于Authlogic的用户模型......如何在演唱会中使用它们?我会感激一两个指针在正确的方向。

谢谢,

2 个答案:

答案 0 :(得分:2)

这很好用

放置模型

  key :location_id, Integer, :required => true

    def location
        Location.find(location_id)
    end

locations model

  def self.find_places(id)
    Property.find_by_location_id(id)
  end

  def find_places
    Property.find_by_location_id(id)
  end

答案 1 :(得分:1)

您也可以使用类型转换。

您可以在Location类中实现类方法from_mongoto_mongo,而不是仅仅将location_id存储在mongodb中,以允许mongomapper序列化mongo安全中的每个Location实例 - 和 - 友好的态度。

简单(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