当锁定活动记录时,ruby on rails会自动锁定活动记录关联吗?

时间:2011-04-16 18:51:08

标签: ruby-on-rails activerecord locking associations

非常基本的问题:

我有一个模型x has_many y,模型y belongs_to x。

如果我使用id x_id锁定模型x的实例,它是否还锁定了表格中关联的行,其中模型y的值在连接列下具有值x_id?

或者ror锁定只是锁定活动记录而不关心它的关联吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,它不会锁定任何关联。它只是锁定行,而不关心模型关联。

答案 1 :(得分:0)

似乎有two locking strategies in rails,乐观(实际上没有锁定行但ActiveRecord引发ActiveRecord :: StaleObjectError以对同一行进行多次更新[第一次更新除外,这将成功]),和悲观(将FOR UPDATE附加到select语句并实际锁定行(假设您的数据库支持锁定)。ActiveRecord Locking documentation I read through中没有任何一个意味着存在导致/允许关联记录被锁定的任何魔法

由于您可以传递自己的锁定子句,因此我建议您阅读特定数据库如何处理rails用于悲观锁定(select ... for update)和您可以传递的其他子句的子句(使用{{3 }})。