Rails迁移。使用change_column将整数值转换为boolean

问题描述 投票:1回答:2

我正在使用RoR5和PostgreSQL。我有一个列status的表。它是一个整数类型并且包含三个值0,1,2。这些值代表三种状态allowednot_allowedno_tests

我要改变逻辑。我想将两个状态allowednot_allowed转换为boolean。然后我将为no_tests创建一个单独的列。

现在我有这样的依据:enum status: %i[allowed not_allowed no_tests]

我应该如何编写一个迁移,将allowed作为true,将not_allowedno_tests作为更改列中的false

ruby-on-rails postgresql database-migration
2个回答
1
投票

实际上,这是两个单独的操作(更改表结构,转换现有数据),通常只在迁移中完成一个操作。如果我是你,我将首先运行迁移以添加新的状态列,然后在sql中进行更新,如果您可以轻松访问postgres控制台或在rails控制台上重新编码新列中的现有数据。在重新编码数据后,您可以在另一次迁移中删除旧列。


0
投票

我认为你需要在迁移中使用up方法中的一些东西。

def up
  add_column :table_name, :status2, :boolean
  Loop on each element of model check for status and update status2
  remove_column :table_name, :status
  rename_column :table_name, :status2, :status
end

你也可以在更新here中使用case语句它会有所帮助。你可以将你的查询放在迁移中,类似于here

你还可以做一件事: 1.进行迁移以添加新列。 2.使rake任务填充数据。 3.再进行一次迁移以删除旧列并重命名新添加的列。

更新:为了更好地了解迁移,请阅读this article

© www.soinside.com 2019 - 2024. All rights reserved.