Ваша проблема на самом деле выходит за рамки ActiveRecord. Независимо от того, как вы реализуете свой метод before_save, всегда будет возможно возникновение состояния гонки (без каламбура) и двух записей, имеющих current = true в базе данных. Для получения дополнительной информации см. Раздел Параллельность и целостность для validates_uniqueness_of .
Основная проблема заключается в том, что логика проверки того, имеет ли запись current = true и операция, устанавливающая запись в current = true, не является атомарной. Эта проблема часто возникает в параллельных системах.
Чтобы решить эту проблему, вам необходим индекс уникального ключа в базе данных. Я бы порекомендовал изменить текущий флаг на приоритетное поле. Приоритетом является целое число, которое имеет уникальный индекс ключа. База данных гарантирует, что не существует двух записей одновременно с одинаковым значением приоритета. «Текущей» расой всегда будет та, которая имеет наивысшее значение приоритета.
Состояние гонки на самом деле все еще будет существовать - теперь у вас просто есть способ его обнаружить. Когда вы устанавливаете текущую гонку (запрашивая у таблицы наибольшее значение приоритета), генерируется исключение, если другая запись в настоящее время содержит то же значение приоритета, что и та, которую вы пытаетесь сохранить. Просто поймайте исключение дубликата ключа и попробуйте снова.