多个Rails ORM

Dou*_*oug 5 orm activerecord mongodb neo4j ruby-on-rails-3

我们有一个Rails 3应用程序,它有一个映射的PostgreSQL数据库(有~10个表)activerecord.一切都很好.

但是,我们也可以使用:

  • 一个MongoDB数据库,以存储图像(可能与mongoidgem).
  • 一个Neo4j的数据库(可能与neo4j-rails创业板),而不是PostgreSQL的用于一些表.

使用带有一个Rails ORM的数据库很简单,多亏了database.yml.但是当有多个ORM时,我们如何处理?有这么好的方法吗?例如,ActiveHash(和ActiveYaml)可以很好地与ActiveRecord配合使用.我认为有可能让不同的ORM协同工作.谢谢你的任何提示.

Jas*_*rip 6

这实际上取决于ORM的类型.一个很好的方法是使用继承.例如,您可以在database.yml文件中定义多个数据库和适配器.您可以使用ActiveRecord的establish_connection方法轻松地与这些对话.

# A typical Active record class
class Account < ActiveRecord::Base
  ...
end

# A new database connection
class NewConnection < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "users_database"
end

# A new Active record class using the new connection
class User < NewConnection
  ...
end
Run Code Online (Sandbox Code Playgroud)

这里唯一的缺点是,当您连接到多个活动记录数据库时,迁移可能会有点冒险.

混合ORM

混合ORMS很容易.例如mongodb(有mongoid),只是不从活动记录继承并在你想要使用mongo的模型中包含以下内容:

class Vehicle
  include Mongoid::Document

  field :type
  field :name

  has_many :drivers
  belongs_to :account

end
Run Code Online (Sandbox Code Playgroud)

构建在活动模型之上的ORM可以很好地协同工作.例如,使用mongoid,您应该能够定义与ActiveRecord模型的关系,这意味着您不仅可以拥有多个数据库,而且可以通过活动模型轻松进行通信.