我正在尝试对比赛条件实施乐观锁定。为此,我在产品:通过迁移进行的模型中添加了额外的列lock_version
。
#Product: Model's new field:
# attribute_1
# lock_version :integer(4) default(0), not null
before_validation :method_1, :if => :recalculation_required_attribute
def method_1
####
####
if self.lock_version == Product.find(self.id).lock_version
attributes["lock_version"] += 1
attributes["updated_at"] = Time.now
Product.where(:id => self.id).update_all(attributes)
self.attributes = attributes
end
end
产品模型具有attribute_1
。如果attribute_1
需要重新计算,则会调用before_validation: method_1
。
我正在使用lock_version
进行乐观锁定。但是,update_all
不会增加lock_version
,并且不能self.save!
,因为它将
触发before_validation: method1
无限次。
如果我喜欢以下内容,是否可以使用update_all进行乐观锁定?
attributes["lock_version"] = 1 +1
attributes["updated_at"] = Time.now
Product.where(:id => self.id).update_all(attributes)
您可以在lock_version
上查看更多信息。