所以我有这个运行的post_save方法,以确保当前的地址对象是该用户下唯一活动的地址。
before_save ensure_one_active_address
def ensure_one_active_address
Address.where("active = ? AND user_id = ? AND id NOT IN (?)", active, user_id, id).update_all(active: 0) if active
end
不幸的是,我收到以下错误:
ActiveRecord::StatementInvalid·Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction
我无法重现错误,只在生产中发生。我理解错误的含义,但我不明白它在哪里发生。 update_all是在查询完成之前发生的吗?
答案 0 :(得分:0)
如果您确实想要使用此回调,则应使用after_commit
代替after_save
。