问题

我错误地将 hased_pa​​ssword 列替换为 hashed_pa​​ssword .

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



解决方法
rename_column :table, :old_column, :new_column

更新:

您可能需要创建一个单独的迁移来执行此操作. (重命名FixColumnName)

script/generate migration FixColumnName
# creates  db/migrate/xxxxxxxxxx_fix_column_name.rb

然后按照自己的意愿编辑迁移.

# db/migrate/xxxxxxxxxx_fix_column_name.rb
class FixColumnName < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end

  def self.down
    # rename back if you need or do something else or do nothing
  end
end

Rails 3.1的更新

向上向下方法仍然适用. Rails 3.1收到一个更改方法,知道如何迁移数据库,并在则将回滚迁移,而无需编写单独的下拉方法"

rails g migration FixColumnName

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

如果您碰巧有一大堆重新命名的列,或者需要一遍又一遍重复表名称.

rename_column :table_name, :old_column1, :new_column1
rename_column :table_name, :old_column2, :new_column2
...

您可以使用 change_table 保持内容一点点.

class FixColumnNames < ActiveRecord::Migration
  def change
    change_table :table_name do |t|
      t.rename :old_column1, :new_column1
      t.rename :old_column2, :new_column2
      ...
    end
  end
end

谢谢, Luke &amp;&amp; Turadg ,用于提出主题.

然后只需像往常一样 db:migrate ,或者是您的业务.


Rails 4的更新

在创建用于重命名列的 Migration 时,Rails 4生成 change 方法而不是向上代码>如上面的答案中所提到的.生成的更改方法如下:

$ > rails g migration ChangeColumnName

这将创建类似于以下的迁移文件:

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



相关问题推荐