gpt4 book ai didi

ruby-on-rails - rails 3 : Migrate data

转载 作者:行者123 更新时间:2023-12-04 21:54:17 25 4
gpt4 key购买 nike

我的 Rails 3 应用程序有一个 User 模型和一个 Profile 模型。一位用户 has_one轮廓。

当前配置文件具有属性 first_namelast_name .虽然我不确定您为什么要更改它们,但我最初认为这些应该是可变的,因此我将它们放在 Profile 模型而不是 User 模型中。

然而,随着应用程序的发展,我发现实际上我需要用户的名字和姓氏不被更改,而且我真的需要它们成为用户模型而不是配置文件模型的一部分。

所以,我想知道,你能写一个迁移来:

  • 添加 first_namelast_name列到用户模型。
  • 以现有的first_namelast_name来自关联配置文件记录的给定用户的值,并将其复制到用户模型中。
  • 删除 first_namelast_name Profile 模型中的列,因为不再需要它们。

  • 那么,这能做到吗?你能举个例子吗?而且,最重要的是,有什么我应该注意的问题吗?我想将此更改应用于生产应用程序,因此在进行此更改时不会丢失数据至关重要。

    谢谢!

    最佳答案

    当然,非常容易。将其放入迁移中:

        add_column(:users, :last_name, :string)
    add_column(:users, :first_name, :string)

    User.reset_column_information

    User.all.each do |u|
    u.last_name = u.profile.try(:last_name)
    u.first_name = u.profile.try(:first_name)
    u.save
    end

    remove_column(:profiles, :first_name)
    remove_column(:profiles, :last_name)

    我在那里使用了 try() 来减轻丢失配置文件的可能性。它不会检查保存操作中的错误,因此如果您认为需要,请考虑这一点。此外,与往常一样,在运行之前进行数据库转储备份。 :)

    关于ruby-on-rails - rails 3 : Migrate data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066207/

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