In meiner general_exams
Tabelle habe ich eine Spalte mit dem Namen semester
, Typ ist string
. Jetzt möchte ich seinen Namen in semester_id
ändern, geben Sie integer
ein. Ich habe über Migration gelesen und es hat verfügbaren Transformationen:So benennen Sie eine Spalte um und ändern ihren Typ durch gleichzeitige Migration
- rename_column (table_name, column_name, new_column_name): Benennt eine Spalte, sondern hält die Art und Inhalt.
- change_column (Tabellenname, Spaltenname, Typ, Optionen): Ändert die Spalte unter Verwendung derselben Parameter wie add_column in einen anderen Typ.
Also, ich meine Migration-Datei wie folgt zu erstellen:
class RenameSemesterFromGeneralExams < ActiveRecord::Migration
def change
rename_column :general_exams, :semester, :semester_id
change_column :general_exams, :semester_id, :integer
end
end
Aber, wenn ich rake db:migrate
laufen, es hat Fehler:
== 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 meinem Tisch GeneralExam, zerstörte ich alle Daten . Also, jeder kann mir sagen, wie kann ich das tun? Oder ich muss zwei Migrationsdateien erstellen?
Diese Frage eigentlich wirklich hilfreich ist, da neben dem Störungshoffnungproenergie, es genau gibt an, wie einen Spaltennamen ändern und tippe die Frage selbst ein! – EdgeCaseBerg