如何更改rails 3中的列名?

时间:2013-06-01 00:32:33

标签: ruby-on-rails database model-view-controller

基本上我不小心写了password_has而不是password_hash,我想通过rake db:rollback我可以做出相应的更改,然后做rake db:migrate和rake db:reset但看起来好像mysql中没有发生变化..我保持得到错误..我该怎么办?理想情况下,我想破坏数据库并重新启动它,但它不会破坏它,因为当我这样做并尝试重新创建它时,它说它仍然有一个已经创建的副本..我在这里疯了,请帮助我是一个新手!

3 个答案:

答案 0 :(得分:6)

您可以编写重命名迁移。生成它:

rails g migration RenameColumn

接下来,在生成的迁移文件中应用以下代码以重命名列:

 class RenameColumn < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end

  def self.down
    # rename back if you need
  end
end

运行迁移后,请避免将其回滚以进行修改。写一个新的来代替。

如果rake db:migrate出错,请尝试运行您需要的错误:

rake db:migrate:up VERSION=20130405061213

只需替换正确的版本(它位于迁移的文件名中).x

答案 1 :(得分:1)

我认为你不必首先回去,只需进行新的迁移即可更改列名。 如果您指定了错误消息,也会有所帮助。

答案 2 :(得分:-1)

您可以执行以下sql,例如:

ALTER TABLE table_name CHANGE prev_column_name new_column_name INTEGER;