在其他两个列之间创建一个新列(迁移)?

Make a new column (migration) between two other columns?

是否有 quick/easy 方法来进行迁移,在两个现有列之间添加一个新列?

注意:我用谷歌搜索但找不到明显的答案。但我也很好奇这是否是好的做法(因为如果由于某种原因其他 column/s 被删除,那么迁移可能会失败?)

如果您尚未将更改提交到生产环境,您可以通过回滚迁移然后更改文件名中的时间戳来重新排序迁移。

如果那不是替代方案,您实际上可以直接使用 SQL 对某些数据库上的列重新排序,即使它不是迁移 DSL 的一部分。迁移毕竟只是一个 DSL,用于创建 SQL 字符串并 运行 它们以跨环境的可重复方式。

如果您无法使用 DSL 生成您想要的 SQL,您始终可以使用 execute 来执行原始 DSL 字符串。

# MySQL example
class ReorderYourTableName  < ActiveRecord::Migration[5.2]
  def change
    execute "alter table yourTableName change column yourColumnName yourColumnName dataType after yourSpecificColumnName;"
  end
end

但是,在某些数据库上,如果不执行大量创建新列和随机排列数据的步骤,您实际上无法对列重新排序。