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

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


当前回答

只需使用以下方法生成迁移:

rails g migration rename_hased_password

之后,编辑迁移并在更改方法中添加以下行:

rename_column :table, :hased_password, :hashed_password

这应该会奏效。

其他回答

我在使用PostgreSQL数据库开发Rails 6应用程序时遇到了这个挑战。

以下是我修复它的方法:

在我的例子中,table_name是“Products”,old_column是“SKU”,new_column则是“ProductNumber”。

创建包含用于重命名列的命令的迁移文件:rails生成迁移重命名KUToProductNumberInProducts打开db/migrate目录中的迁移文件:数据库/migrate/2021028082344_rename_sku_to_product_number_in_products.rb添加用于重命名列的命令:类RenameKuToProductNumberInProducts<ActiveRecord::迁移[6.0]def更改#重命名列:表名,:旧列,:新列重命名列:产品,:sku,:product_number终止终止保存,然后运行迁移命令:轨道数据库:移植

现在,您可以通过查看架构文件来确认列的重命名:

    db/schema.rb

如果您对列的重命名不满意,可以始终回滚:

    rails db:rollback

注意:在调用列名的所有位置,努力将列名修改为新名称。

在我看来,在这种情况下,最好使用rakedb:rollback,然后编辑迁移并再次运行rakedb:migrate。

但是,如果列中有不希望丢失的数据,请使用rename_column。

运行rails g migration ChangesNameInUsers(或任何您想命名的名称)

打开刚刚生成的迁移文件,并在方法中添加此行(在def change和end之间):

重命名列:表名,:名称you_want_to_change,:新名称

保存文件,并在控制台中运行rakedb:migrate

检查你的schema.db,看看数据库中的名称是否真的改变了!

希望这有帮助:)

在控制台中:

rails generate migration newMigration

在newMigration文件中:

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

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-迁移或活动记录迁移。