Rails — создание таблицы и вставка данных в один файл миграции

#ruby-on-rails #activerecord #database-migration #rails-migrations #ruby-on-rails-6.1

#ruby-on-rails #activerecord #база данных-миграция #rails-миграции #ruby-on-rails-6.1

Вопрос:

У меня есть миграция в Rails 6.1 проект, подобный этому:

 create_table "items", id: false do |t|
  t.string "serial_no", limit: 20, first: true, null: false, index: {unique: true}
  t.float "price", null: false
  t.integer "company_id", limit: 2, null: false
  t.integer "product_id", null: false
end

cols   = # whatever
values = # whatever

ActiveRecord::Base.connection.execute("INSERT INTO items (#{cols}) VALUES #{values};")
 

Я получаю сообщение об ошибке: PG::UndefinedTable: ERROR: relation "items" does not exist
Я знаю, что если я разделю их на два файла, они будут работать, но я хочу, чтобы эти вставки были в одном файле миграции.

Я попробовал ActiveRecord::Base.connection.commit_db_transaction инструкцию before insertion, она сработала, но затем возникла ERROR: duplicate key value violates unique constraint "schema_migrations_pkey" при сохранении записи миграции.

Есть идеи, как это сделать в одном файле миграции?

Комментарии:

1. Протестировано с Rails 6.1.0 и pg 1.1 и не получило никаких проблем.

2. Есть ли причина, по которой вам нужно создавать записи в процессе миграции? Почему бы не использовать семена или первоочередную задачу?

3. @MarkMerritt Это одноразовая миграция таблиц из одной базы данных в другую в рамках одного проекта.