ruby на рельсах автоматически блокирует ассоциации активных записей при блокировке активной записи? - PullRequest
4 голосов
/ 16 апреля 2011

Довольно простой вопрос:

У меня есть модель x с has_many y, а модель y принадлежит_ к x.

Если я блокирую экземпляр модели x с идентификатором x_id, блокирует ли он также связанные строки в таблице для модели y, которая имеет значение x_id в столбце соединения?

Или rorблокировка просто блокирует активную запись и не заботится о ее ассоциациях?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Из того, что я знаю, это не заблокировало бы никаких ассоциаций. Он просто блокирует ряды, не заботясь о модельных ассоциациях.

0 голосов
/ 17 апреля 2011

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

Поскольку вы можете передать свое собственное предложение блокировки, я бы посоветовал прочитать о том, как ваша конкретная база данных обрабатывает рельсы предложений, используемые для пессимистической блокировки (select ... for update) и другие предложения, которые вы можете передать (используя ActiveRecord # lock! ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...