Предисловие
Я знаю, что мог бы создать новую миграцию, но я хочу знать, возможно ли редактировать существующую таким образом.Это я изучаю Rails и пробую новые вещи.Не работает рабочая версия этого кода.
Проблема
Я пытаюсь получить в своей схеме таблицу series
, содержащую ссылку на books
, но это не такработает.
Начальная настройка
rails db:migrate:status
имеет меня в этом состоянии:
Status Migration ID Migration Name
--------------------------------------------------
up 20190330155354 Create articles
up 20190401004837 Create comments
up 20190402231737 Create books
up 20190402233013 Create pages
up 20190403221445 Create series
И мой файл 20190402231737_create_books.rb
выглядит так:
class CreateBooks < ActiveRecord::Migration[5.2]
def change
create_table :books do |t|
t.integer :series_number
t.integer :year_published
t.timestamps
end
end
end
Предпринятые шаги
Сначала я возвращаюсь к миграции, которую хочу отредактировать (мне нужно выполнить следующую команду 3 раза - указание версии # не работает, и я не уверен, почему):
rails db:rollback
Теперь rails db:migrate:status
имеет меня в этом состоянии:
Status Migration ID Migration Name
--------------------------------------------------
up 20190330155354 Create articles
up 20190401004837 Create comments
down 20190402231737 Create books
down 20190402233013 Create pages
down 20190403221445 Create series
Я добавил эту строку в миграцию книг:
t.references :series, foreign_key: true
Затем я запускаю миграцию:
rails db:migrate
Ожидаемый результат
Что я хочу для моей схемы, которая будет сгенерирована следующим образом:
create_table "series", force: :cascade do |t|
t.string "title"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["series_id"], name: "index_books_on_series_id"
end
Фактический результат
Строка t.index ["series_id"], name: "index_books_on_series_id"
никогда не добавляется в схему.