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

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


当前回答

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

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

 def change
    rename_column :table_name, :old_name, :new_name
  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

首先你需要跑步

rails g migration create_new_column_in_tablename new_column:datatype
rails g migration remove_column_in_tablename old_column:datatype

然后需要检查db/migration您可以检查nem迁移中的详细信息,如果所有详细信息都正确,则需要运行:

rails db:migrate

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

rails g migration rename_hased_password

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

rename_column :table, :hased_password, :hashed_password

这应该会奏效。

Rails 5迁移更改

eg:

rails g model学生Student_name:字符串年龄:整数

如果要将student_name列更改为name

注意:-如果没有运行railsdb:migrate

您可以执行以下步骤

rails d model学生Student_name:字符串年龄:整数

这将删除生成的迁移文件,现在您可以更正列名

rails g model学生姓名:string年龄:整数

如果已迁移(railsdb:migrate),请使用以下选项更改列名

rails g迁移RemoveStudentNameFromStudent student_name:字符串rails g迁移AddNameToStudent名称:字符串

您有两种方法可以做到这一点:

在这种类型中,当回滚时,它会自动运行与其相反的代码。def更改重命名列:表名称,:旧列名称,:新列名称终止对于这种类型,它在rakedb:migrate时运行up方法,在rakedb:rollback时运行down方法:定义self.up重命名列:表名称,:旧列名称,:新列名称终止定义自己向下重命名列:表名称,:新列名称,:旧列名称终止