我错误地将列命名为hased_password
而不是hashed_password
。
如何使用迁移重命名此列来更新数据库架构?
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 的更新
同时,在up
和down
的方法仍然适用。 Rails 3.1 接收一个change
方法,该方法“知道如何迁移数据库并在回滚迁移时将其反转,而无需编写单独的 down 方法”
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
&& Turadg
提出这个话题。
然后只是db:migrate
像往常一样db:migrate
,或者你继续开展业务。
Rails 4 的更新
在创建Migration
作为用于重命名的列,轨道 4 产生change
的方法,而不是up
和down
如在上面提到的答案。生成的change
方法如下:
$ > rails g migration ChangeColumnName
这将创建一个类似于此的迁移文件:
class ChangeColumnName < ActiveRecord::Migration
def change
rename_column :table_name, :old_column, :new_column
end
end
IMO,在这种情况下,更好地使用rake db:rollback
。然后编辑您的迁移并再次键入rake db:migrate
。但是,如果列中有数据,则不想丢失,请使用rename_column
。
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
在Available Transformations
rename_column(table_name, column_name, new_column_name):
重命名列但保留类型和内容。