У меня есть модель User
с отношением «многие ко многим» к Book
через UserBook
. Чтобы создать новые отношения, пользователь может:
- Выберите из списка доступных книг
- Создайте новый запрос книги, введя код ISBN (который можно использовать для поиска книги), они могут подать несколько запросов одновременно
Я бы хотел запретить кому-либо создавать дубликаты в модели UserBook
, поэтому я сделал:
class UserLocation < ApplicationRecord
belongs_to :user
belongs_to :book
validates_uniqueness_of :book_id, scope: :user_id
end
Это прекрасно работает, когда пользователь пытается ввести book_id книги, которая уже существует, но возвращается с ошибкой. (Я могу жить с этим)
Настоящая проблема возникает, когда кто-то печатает тот же book_id дважды, что и новая книга. Это создает две записи UserLocation без каких-либо ошибок.
Я вижу из журналов сервера, что все запросы на проверку уникальности выполняются до сохранения записей. Есть ли способ сделать это с проверкой модели?
Я бы хотел предотвратить исправление этого в контроллере, поэтому не буду искать ответы, которые предлагают, например, дедуплицировать массив.