Я использую рельсы на Postgres.
У меня есть 2 таблицы, скажем, houses
(имя: строка) и users
(имя: строка), а user belongs_to house
, у нас есть ключ unique
для дома, поэтому у нас не будет двух домов с одинаковым именем.
когда кто-то хочет создать нового пользователя, он отправляет {user: Omer, house: red}
, и на рельсах мы запустим следующий код
house = House.find_or_initialize_by(name: params[:house])
house.users.create(name: params[:user])
проблема заключается в том, что я буду выполнять несколько вызовов этого фрагмента кода, так как из-за параллелизма я получу два дома с одинаковым именем, даже если у меня есть уникальный индекс в таблице.
из моей схемы
t.index ["name"], name: "index_houses_on_name", unique: true, using: :btree
Я что-то упустил?