Я пытаюсь обновить запись, однако, если она не удалась из-за уникальной проверки, я удаляю запись, поскольку предполагаемая запись уже существует.
def update_dependent_model(records, foreign_key, foreign_key_id)
records.each do |record|
begin
ActiveRecord::Base.transaction do
record.update_column(foreign_key.to_sym, foreign_key_id)
end
rescue ActiveRecord::RecordNotUnique, PG::UniqueViolation => e
ActiveRecord::Base.connection.execute 'ROLLBACK'
record.delete
end
end
end
Я не уверен, чтонеправильно с этим кодом. Некоторые записи, которые должны быть удалены или не удаляются. Логи тоже не помогают. Не показывает ошибку.
Кроме того, странная вещь о журналах:
SQL (2.4ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 124080]]
SQL (0.6ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 153032]]
SQL (0.2ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 124099]]
SQL (0.4ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 176549]]
SQL (0.5ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 162725]]
SQL (0.8ms) UPDATE "records" SET "foriegn_key_id" = 220 WHERE "records"."id" = $1 [["id", 124109]]
(0.1ms) ROLLBACK
SQL (0.3ms) DELETE FROM "records" WHERE "records"."id" = $1 [["id", 124109]]
На самом деле согласно этому запись с идентификатором 124080
обновлена, но странным образом в БД эта записьвсе еще присутствует.