返回

MongoDB 和 MySQL 数据库关联:Rails 7 项目的详细指南

mysql

MongoDB 和 MySQL 数据库关联:Rails 7 指南

在 Rails 7 项目中,你可能会遇到需要在不同数据库(如 MongoDB 和 MySQL)之间建立关联的情况。本文将探讨如何通过 Mongoid 和 ActiveRecord 宝石实现此关联,从而解决这一难题。

理解问题

在我们的 OTT 平台项目中,我们需要定义关联,以便 Mylist 属于一个 Content,而 Content 拥有许多 MylistContent 模型存储在 MongoDB 数据库中,而 Mylist 模型存储在 MySQL 数据库中。

解决方案:建立关联

要建立关联,我们需要 Mongoid 和 ActiveRecord 宝石。Mongoid 负责管理 MongoDB 模型,而 ActiveRecord 负责管理 MySQL 模型。

步骤 1:定义模型

首先,我们定义 ContentMylist 模型:

Content.rb (MongoDB)

class Content
  include Mongoid::Document
  include Mongoid::Timestamps
end

Mylist.rb (MySQL)

class Mylist < ApplicationRecord
end

步骤 2:Mongoid::Association 扩展

接下来,我们在 Mylist 模型中使用 Mongoid::Association 模块,以便在 MySQL 模型中定义与 MongoDB 模型的关联:

Mylist.rb

class Mylist < ApplicationRecord
  extend Mongoid::Association::Extensions
  embeds_one :content, class_name: 'Content'
end

步骤 3:belongs_to 宏

Mylist 模型中,使用 belongs_to 宏来定义它属于一个 Content

Mylist.rb

class Mylist < ApplicationRecord
  extend Mongoid::Association::Extensions
  belongs_to :content
end

步骤 4:has_many 宏

Content 模型中,使用 has_many 宏来指示它拥有许多 Mylist

Content.rb

class Content
  include Mongoid::Document
  include Mongoid::Timestamps

  has_many :mylists
end

代码示例

下面是创建、检索和更新具有关联的 MylistContent 对象的示例:

创建对象

content = Content.create(...)
mylist = Mylist.create(content: content)

检索对象

mylist = Mylist.find(...)
content = mylist.content

更新对象

mylist.content.update(...)
mylist.save!

结论

通过遵循这些步骤,你可以在 Rails 7 项目中轻松建立 MongoDB 数据库和 MySQL 数据库之间的关联。这使你可以轻松地访问和管理跨不同数据存储的数据。

常见问题解答

1. 为什么需要使用 Mongoid 和 ActiveRecord?

使用 Mongoid 管理 MongoDB 模型,使用 ActiveRecord 管理 MySQL 模型,这确保了不同数据库之间的正确交互。

2. belongs_tohas_many 宏有什么区别?

belongs_to 表示一个模型属于另一个模型,而 has_many 表示一个模型拥有许多其他模型。

3. Mongoid::Association 扩展的作用是什么?

它允许我们在 MySQL 模型中定义与 MongoDB 模型的关联。

4. 是否可以将多个 MongoDB 模型与一个 MySQL 模型关联?

是的,你可以使用 has_and_belongs_to_many 宏实现多对多关联。

5. 是否可以将多个 MySQL 模型与一个 MongoDB 模型关联?

是的,你可以使用 has_one :through 宏实现一对多关联。