gpt4 book ai didi

ruby-on-rails - 如何在Mongoid中从belongs_to迁移到embedded_in?

转载 作者:行者123 更新时间:2023-12-01 17:15:57 24 4
gpt4 key购买 nike

如果首先使用 Belong_to 和 has_many 关联构建模型,然后意识到需要转移到嵌入和 embeds_many 关联,那么如何在不使数千条记录无效的情况下做到这一点?需要以某种方式迁移它们。

最佳答案

我不太确定我的解决方案是否正确。这是您可能会尝试完成的事情。

假设你有这样的模型

#User Model
class User
include Mongoid::Document
has_many :books
end

#Book Model
class Book
include Mongoid::Document
field :title
belongs_to :user
end

第一步,我将创建另一个与上面的 Book 模型类似的模型,但它是嵌入的而不是引用的。

#EmbedBook Model
class EmbedBook
include Mongoid::Document
field :title
embedded_in :user
end

#User Model (Update with EmbedBook Model)
class User
include Mongoid::Document
embeds_many :embed_books
has_many :books
end

然后为上面的示例创建一个类似这样的 Mongoid 迁移

class ReferenceToEmbed < Mongoid::Migration
def up
User.all.each do |user|
user.books.each do |book|
embed_book = user.embed_books.new
embed_book.title = book.title
embed_book.save
book.destroy
end
end
end
def down
# I am not so sure How to reverse this migration so I am skipping it here
end
end

运行迁移后。从这里可以看到嵌入了引用书,但是嵌入模型的名称是EmbedBook,模型Book还在

所以下一步是将模型书制作为嵌入。

class Book
include Mongoid::Document
embedded_in :user
field :title
end

class User
include Mongoid::Document
embeds_many :books
embeds_many :embed_books
end

所以下一步是将嵌入书籍类型迁移到书籍类型

class EmbedBookToBook < Mongoid::Migration
def up
User.all.each do |user|
user.embed_books.each do |embed_book|
book = user.books.new
book.title = embed_book.title
book.save
embed_book.destroy
end
end
def down
# I am skipping this portion. Since I am not so sure how to migrate back.
end
end

现在,如果您看到 Book 已从引用更改为嵌入。您可以删除 EmbedBook 模型来完成更改。

  • 这只是建议。在尝试生产之前,请先在开发中尝试这一点。因为,我认为我的建议可能有问题。

关于ruby-on-rails - 如何在Mongoid中从belongs_to迁移到embedded_in?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15913786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com