In my general_exams
table, I have a column named semester
, type is string
. Now I want to change its name to semester_id
, type is integer
. I have read about migration and it has available transformations:
- rename_column(table_name, column_name, new_column_name): Renames a column but keeps the type and content.
- change_column(table_name, column_name, type, options): Changes the column to a different type using the same parameters as add_column.
So, I create my migration file like this:
class RenameSemesterFromGeneralExams < ActiveRecord::Migration
def change
rename_column :general_exams, :semester, :semester_id
change_column :general_exams, :semester_id, :integer
end
end
But, when I run rake db:migrate
, it has error:
== 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
In my table GeneralExam, I destroyed all data.
So, anyone can tell me how can I do that? Or I must create two migration files?
Best Answer
This works as of Rails 4