Rails の ActiveRecord での lock! の細かい話
前プロジェクトでログを眺めていて気づきました。仕組みを考えれば確かにという感じだった。
class User < ApplicationRecord after_initialize -> { logger.info('Instantiate!') } end
User.find(1).lock! # User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 # Instantiate! # User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 FOR UPDATE # Instantiate! User.lock(true).find(1) # User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 FOR UPDATE # Instantiate!