Rails ActiveRecord - 获取与锁定的belongs_to关联

问题描述 投票:0回答:1

我想检索一个belongs_to关联并获取其对象的数据库锁。

> character.team.lock!
ActiveRecord::Base -- Team Load -- { :sql => "SELECT  `teams`.* FROM `teams` WHERE `teams`.`id` = 1 LIMIT 1" }
ActiveRecord::Base -- Team Load -- { :sql => "SELECT  `teams`.* FROM `teams` WHERE `teams`.`id` = 1 LIMIT 1 FOR UPDATE" }

上面运行两个查询,技术上有意义 - character.team加载团队,然后team.lock!再次选择FOR UPDATE

问题是 - 我怎样才能让它只发出一个查询?

ruby-on-rails locking rails-activerecord
1个回答
0
投票

显然你不能,因为.lock方法总是重新加载实例(发出第二个SQL加载)。来自the docs

.lock:获取此记录的行锁。重新加载记录以获取请求的锁定。传递SQL锁定子句以附加SELECT语句的末尾或传递“FOR UPDATE”(默认值为独占行锁)的true。返回锁定的记录。

© www.soinside.com 2019 - 2024. All rights reserved.