我错误地将列命名为hased_password而不是hashed_password。
如何使用迁移重命名此列来更新数据库架构?
我错误地将列命名为hased_password而不是hashed_password。
如何使用迁移重命名此列来更新数据库架构?
当前回答
您有两种方法可以做到这一点:
在这种类型中,当回滚时,它会自动运行与其相反的代码。def更改重命名列:表名称,:旧列名称,:新列名称终止对于这种类型,它在rakedb:migrate时运行up方法,在rakedb:rollback时运行down方法:定义self.up重命名列:表名称,:旧列名称,:新列名称终止定义自己向下重命名列:表名称,:新列名称,:旧列名称终止
其他回答
我在rails 5.2上,试图重命名device User上的列。
rename_column位对我有效,但单数:table_name抛出了“User table not found”错误。Plural为我工作。
rails g RenameAgentinUser
然后将迁移文件更改为:
rename_column :users, :agent?, :agent
哪里:代理人?是旧的列名。
对于Ruby on Rails 4:
def change
rename_column :table_name, :column_name_old, :column_name_new
end
从API:
rename_column(table_name, column_name, new_column_name)
这将重命名列,但保持类型和内容不变。
在我看来,在这种情况下,最好使用rakedb:rollback,然后编辑迁移并再次运行rakedb:migrate。
但是,如果列中有不希望丢失的数据,请使用rename_column。
$: rails g migration RenameHashedPasswordColumn
invoke active_record
create db/migrate/20160323054656_rename_hashed_password_column.rb
打开该迁移文件并按如下方式修改该文件(请输入原始table_name)
class RenameHashedPasswordColumn < ActiveRecord::Migration
def change
rename_column :table_name, :hased_password, :hashed_password
end
end