我错误地将列命名为hased_password而不是hashed_password。

如何使用迁移重命名此列来更新数据库架构?


当前回答

从API:

rename_column(table_name, column_name, new_column_name)

这将重命名列,但保持类型和内容不变。

其他回答

打开RubyonRails控制台并输入:

ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column

RubyonRails的某些版本支持向上/向下迁移方法,如果您的迁移中有向上/下方法,那么:

def up
    rename_column :table_name, :column_old_name, :column_new_name
end

def down
    rename_column :table_name, :column_new_name, :column_old_name
end

如果您在迁移中使用了更改方法,那么:

def change
    rename_column :table_name, :column_old_name, :column_new_name
end

有关更多信息,请参阅:RubyonRails-迁移或活动记录迁移。

rails g迁移migrationName

因此,您转到生成的迁移并添加:

rename_column :table, :old_column, :new_column

到方法

这可能比重命名列、创建新列并复制内容更好:

通过这种方式,我们可以保存旧列中的内容

这可能是一代人:

rails generate migration add_birthdate_to_User birthdate:string

这可能是迁移:

class AddBirthdateToUser < ActiveRecord::Migration[7.0]
  def change
    add_column :user, :birthdate, :json, default: '[]', null: false

    reversible do |dir|
      dir.up do
        User.update_all('birthdate=birtdate') # rubocop:disable Rails/SkipsModelValidations
      end
    end
  end
end

之后,您必须删除错误的“出生日期”列

class RemoveBirthdateFromUser < ActiveRecord::Migration[7.0]
  def change
    remove_column :User, :Birtdate, :json
  end
end

生成RubyonRails迁移:

$:> rails g migration Fixcolumnname

在迁移文件中插入代码(XXXXX fixcolumnname.rb):

class Fixcolumnname < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end