ОБНОВЛЕНИЕ Проблема, скорее всего, связана с новой миграцией. В Rails 5.2 (у меня нет под рукой Rails 6) rails g migration CreateJoinTableAuthorsBooks author:references book:references
производит миграцию следующим образом:
create_join_table :authors, :books do |t|
t.references :author, foreign_key: true
t.references :book, foreign_key: true
end
create_join_table :authors, :books
уже создает таблицу со ссылками (хотя они не объявлены внешними ключами). t.references :author
и t.references :book
избыточны. В Rails 5.2 эта избыточность упускается из виду, но, возможно, в Rails 6 нет.
По этой причине я бы рекомендовал настроить вашу миграцию, чтобы все было правильно объявлено и проиндексировано.
create_join_table :authors, :books, column_options: { null: false, foreign_key: true } do |t|
t.index [:author_id, :book_id]
t.index [:book_id, :author_id]
end
Обычная процедура исправления неправильной миграции – сначала откатить миграцию с помощью rails db:rollback
, а затем затем удалить неверный файл миграции. Для отката требуется, чтобы откатываемая миграция все еще существовала (и была обратима).
В противном случае начните с новой базы данных разработки, используя версию db/schema.rb
с rails db:reset
. Обратите внимание, что это уничтожит ваши базы данных разработки и тестирования; это не должно быть проблемой. Убедитесь, что ваш db/schema.rb
не содержит изменений из вашей ошибочной миграции, обычно вы можете убедиться в этом, проверив его из системы контроля версий.
Наконец, если все действительно запутано, включая db/schema.rb
, rails db:migrate:reset
повторно запустит все ваши миграции, перестроит db/schema.rb
заново и предоставит вам свежие базы данных для разработки и тестирования.
person
Schwern
schedule
12.07.2019
db:migrate
с предыдущей миграцией? - person Schwern   schedule 12.07.2019