【发布时间】:2011-04-16 18:51:07
【问题描述】:
非常基本的问题:
我有一个模型 x,它有_很多个 y,并且模型 y 属于_to x。
如果我锁定了 id 为 x_id 的模型 x 的实例,它是否也会锁定表中模型 y 的关联行,该模型 y 在连接列下具有值 x_id?
还是 ror 锁定只是锁定活动记录而不关心它的关联?
谢谢!
【问题讨论】:
标签: ruby-on-rails activerecord locking associations
非常基本的问题:
我有一个模型 x,它有_很多个 y,并且模型 y 属于_to x。
如果我锁定了 id 为 x_id 的模型 x 的实例,它是否也会锁定表中模型 y 的关联行,该模型 y 在连接列下具有值 x_id?
还是 ror 锁定只是锁定活动记录而不关心它的关联?
谢谢!
【问题讨论】:
标签: ruby-on-rails activerecord locking associations
据我所知,它不会锁定任何关联。它只是锁定行,而不关心模型关联。
【讨论】:
似乎有two locking strategies in rails,乐观(它实际上并没有锁定行,但 ActiveRecord 为同一行的多次更新引发 ActiveRecord::StaleObjectError [除了第一次更新,它将成功])和悲观(它将FOR UPDATE 附加到select 语句并实际锁定行(假设您的数据库支持锁定)。ActiveRecord Locking documentation I read through 都没有暗示有任何魔法导致/允许关联记录被锁定。
由于您可以传递自己的锁定子句,我建议您阅读特定数据库如何处理用于悲观锁定的子句 rails (select ... for update) 和您可以传递的其他子句(使用 ActiveRecord#lock!)。
【讨论】: