【发布时间】:2012-11-20 09:58:42
【问题描述】:
在我的general_exams 表中,我有一个名为semester 的列,类型为string。现在我想把它的名字改成semester_id,类型是integer。我已阅读有关迁移的信息,并且它具有可用的转换:
- rename_column(table_name, column_name, new_column_name):重命名列,但保留类型和内容。
- change_column(table_name, column_name, type, options):使用与 add_column 相同的参数将列更改为不同的类型。
所以,我像这样创建我的迁移文件:
class RenameSemesterFromGeneralExams < ActiveRecord::Migration
def change
rename_column :general_exams, :semester, :semester_id
change_column :general_exams, :semester_id, :integer
end
end
但是,当我运行rake db:migrate 时,它有错误:
== RenameSemesterFromGeneralExams: migrating =================================
-- rename_column(:general_exams, :semester, :semester_id)
-> 0.0572s
-- change_column(:general_exams, :semester_id, :integer)
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::Error: ERROR: column "semester_id" cannot be cast to type integer
: ALTER TABLE "general_exams" ALTER COLUMN "semester_id" TYPE integer
在我的 GeneralExam 表中,我销毁了所有数据。 那么,任何人都可以告诉我我该怎么做?还是我必须创建两个迁移文件?
【问题讨论】:
-
这个问题实际上很有帮助,因为除了其中的错误之外,它还准确地指定了如何更改列名并输入问题本身!
标签: ruby-on-rails ruby-on-rails-3