Я в Rails версии 2 (работаю над устаревшим проектом).
У меня уже есть таблица students
, в которой есть столбец course
это varchar(255)
тип:
mysql> describe students;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| course | varchar(255) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
Теперь я хотел бы провести рефакторинг, чтобы каждый student
мог иметь много курсов.Итак, я сначала создал файл миграции для создания таблицы courses
:
class CreateCourse < ActiveRecord::Migration
def self.up
create_table :courses do |t|
t.timestamps
t.string :name, :null => false
t.references :student, :null => false
end
add_index :courses, :student_id
end
def self.down
drop_table :courses
end
end
Я запускаю миграцию, таблица courses
успешно создана.
В файле student.rb я также объявил:
class Student < ActiveRecord::Base
has_many :courses
end
Во вновь созданном файле course.rb у меня также есть:
class Course < ActiveRecord::Base
belongs_to :student
end
Теперь я думаю, что мне нужно сделать две вещи:
Мне нужно удалить столбец course varchar(255)
из таблицы students
, потому что он больше не нужен.Я предполагаю, что я просто пишу другую миграцию БД, должна это сделать.
Переместить старые данные в новую таблицу courses
.Для этого мне нужно переместить данные в предыдущем столбце course varchar(255)
таблицы students
во вновь созданный столбец courses
таблицы name
и заполнить соответствующим значением student_id в таблице courses
.Как это сделать?
(Также, пожалуйста, поправьте меня, если я ошибаюсь выше. Спасибо.)