没有必要为了拥有两种类型的数据库而运行两个应用程序而使事情变得过于复杂。听起来您需要DataMapper。它会完全满足您开箱即用的需求。获取 dm-rails gem 以将其与 Rails 集成。
在 DataMapper 中,与 ActiveRecord 不同,您必须提供有关底层数据存储的所有详细信息:它具有哪些字段、它们如何映射模型中的属性、表名是什么(如果在数据库中)、它使用什么后端等等等
阅读文档......有一大堆代码可以给你一个想法。
每个模型只是一个普通的旧 Ruby 对象。类定义只是混合在一起DataMapper::Resource
,它使您可以访问所有 DataMapper 功能:
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :password_hash, String
property :created_at, DateTime
end
但是,您有很多控制权。例如,我可以指定此模型不存储在我的默认数据存储(存储库)中,而是存储在其他配置的数据存储之一中(如果您愿意,可以是 NoSQL 存储)。
class User
include DataMapper::Resource
storage_names[:some_other_repo] = 'whatever'
# ... SNIP ...
end
大多数情况下,DM 的行为就像类固醇上的 ActiveRecord。您将获得所有基础知识,例如查找记录(除非您的模型将原始字段名称抽象出来,否则您永远不必使用原始字段名称):
new_users = User.all(:created_at.gte => 1.week.ago)
你得到验证,你得到观察者,你得到聚合处理......然后得到一堆其他的东西,比如战略性急切加载(解决 n+1 查询问题),延迟加载大文本/blob 字段,多存储库支持. 在我看来,查询逻辑比 AR 好得多。只需阅读文档。它们对人类友好。不仅仅是 API 参考。
有什么缺点?好吧,许多 gem 没有考虑到您可能没有使用 ActiveRecord,因此当您需要 gem 来做某事时,需要做更多的搜索。不过随着时间的推移,这会变得更好,因为在 Rails 3.x 之前,将 DM 与 Rails 无缝集成并不是那么容易。