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

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


当前回答

作为另一种选择,如果您不喜欢迁移,ActiveRecord有一个引人注目的优点,它将自动为您处理名称更改,Datamapper风格。您只需更改模型中的列名,并确保将model.auto_upgrade!在model.rb和viola的底部!数据库随时更新。

看见https://github.com/DAddYE/mini_record

注意:您需要nuke db/schema.rb来防止冲突。

它仍然处于测试阶段,显然不适合所有人,但它仍然是一个令人信服的选择。我目前在两个非平凡的生产应用程序中使用它,没有任何问题。

其他回答

让我们接吻。它只需要三个简单的步骤。以下适用于Rails 5.2。

1.创建迁移

rails g迁移重命名为FullNameInStudentsrails g RenameOldFieldToNewFieldInTableName-这样以后代码库的维护人员就非常清楚了(表名使用复数)。

2.编辑迁移

#我更喜欢显式地编写panddown方法。

# ./数据库/migrate/20190114045137_rename_name_to_full_name_in_students.rb

class RenameNameToFullNameInStudents < ActiveRecord::Migration[5.2]
  def up
    # rename_column :table_name, :old_column, :new_column
    rename_column :students, :name, :full_name
  end

  def down
            # Note that the columns are reversed
    rename_column :students, :full_name, :name
  end
end

3.运行迁移

rake数据库:迁移

你要去参加比赛了!

若您的代码并没有和其他代码共享,那个么最好的选择就是只执行rakedb:rollback然后在migration和rakedb:migrate中编辑列名。就是这样

您可以编写另一个迁移来重命名列

 def change
    rename_column :table_name, :old_name, :new_name
  end

就是这样。

作为另一种选择,如果您不喜欢迁移,ActiveRecord有一个引人注目的优点,它将自动为您处理名称更改,Datamapper风格。您只需更改模型中的列名,并确保将model.auto_upgrade!在model.rb和viola的底部!数据库随时更新。

看见https://github.com/DAddYE/mini_record

注意:您需要nuke db/schema.rb来防止冲突。

它仍然处于测试阶段,显然不适合所有人,但它仍然是一个令人信服的选择。我目前在两个非平凡的生产应用程序中使用它,没有任何问题。

从API:

rename_column(table_name, column_name, new_column_name)

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

如果当前数据对您不重要,您可以使用以下方法删除原始迁移:

rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'

如果没有引号,请在原始迁移中进行更改,然后通过以下方式再次运行升级迁移:

rake db:migrate