Кажется, что в рельсах есть две стратегии блокировки , оптимистичные (которые на самом деле не блокируют строки, но ActiveRecord вызывает ActiveRecord :: StaleObjectError для нескольких обновлений в одной строке [кроме первого обновления,который преуспеет]), и пессимистично (который добавляет FOR UPDATE
к оператору выбора и фактически блокирует строки (при условии, что ваша база данных поддерживает блокировку). Ни одна из ActiveRecord Locking документации, которую я прочитал , не подразумевает, что естьлюбое волшебство, которое вызывает / разрешает блокировку ассоциативных записей.
Поскольку вы можете передать свое собственное предложение блокировки, я бы посоветовал прочитать о том, как ваша конкретная база данных обрабатывает рельсы предложений, используемые для пессимистической блокировки (select ... for update
) и другие предложения, которые вы можете передать (используя ActiveRecord # lock! ).