我想检索一个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
。
问题是 - 我怎样才能让它只发出一个查询?
显然你不能,因为.lock方法总是重新加载实例(发出第二个SQL加载)。来自the docs:
.lock:获取此记录的行锁。重新加载记录以获取请求的锁定。传递SQL锁定子句以附加SELECT语句的末尾或传递“FOR UPDATE”(默认值为独占行锁)的true。返回锁定的记录。