Trong bảng general_exams
của tôi, tôi có cột có tên semester
, loại là string
. Bây giờ tôi muốn đổi tên thành semester_id
, nhập là integer
. Tôi đã đọc về di chuyển và có các biến đổi có sẵn:Cách đổi tên cột và thay đổi loại của nó bằng cách di chuyển cùng một lúc
- rename_column (table_name, column_name, new_column_name): Đổi tên cột nhưng giữ loại và nội dung.
- change_column (tên_bảng, column_name, loại, tùy chọn): Thay đổi cột thành một loại khác bằng cách sử dụng cùng các tham số như add_column.
Vì vậy, tôi có thể tạo tập tin chuyển đổi của tôi như thế này:
class RenameSemesterFromGeneralExams < ActiveRecord::Migration
def change
rename_column :general_exams, :semester, :semester_id
change_column :general_exams, :semester_id, :integer
end
end
Tuy nhiên, khi tôi chạy rake db:migrate
, nó có lỗi:
== 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
Trong bảng GeneralExam của tôi, tôi đã phá hủy toàn bộ dữ liệu . Vì vậy, bất cứ ai cũng có thể cho tôi biết làm thế nào tôi có thể làm điều đó? Hoặc tôi phải tạo hai tệp di chuyển?
Câu hỏi này thực sự là thực sự hữu ích bởi vì, bên cạnh những lỗi trong nó, nó xác định một cách chính xác làm thế nào để thay đổi một tên cột và nhập vào câu hỏi đó! – EdgeCaseBerg