我如何重命名Ruby on Rails迁移中的数据库列?

我错误地命名了一列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的更新

同时,在updown方法仍然适用。Rails 3.1接收的change方法是“知道如何迁移数据库并在迁移回滚时将其反转,而不需要编写单独的停用方法”

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往常一样,但是不管你怎么做你的生意。


Rails 4的更新

在创建Migration列重命名时,Rails 4会生成一个change方法,而不是updown上面的答案中提到的一样。生成的change方法如下:

$ > rails g migration ChangeColumnName

这将创建一个类似于此的迁移文件:

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

self.down应该总是与self.up相反,所以“如果你需要或者做别的事情或者什么也不做”是不被推荐的。只要做:rename_column:table_name,:new_column,:old_column

虽然恢复你所做的一切是正常的做法,self.up我不会说self.down“应该永远相反”。取决于您的迁移的上下文。只是把“相反”,可能不是“正确的”下移。

在Rails 3.1可以更换def self.up,并def self.downdef change它会知道如何回滚。

Turadg – *它会知道如何回滚大部分时间。我找到change的方法是不充分证明,所以倾向于使用updown复杂的迁移方法。

重命名删除索引?

 

添加评论

友情链接:蝴蝶教程