我有一个Datamapper模型,比如XYZ。现在,有多个线程有时会使用此模型读取一行并尝试更新同一行 - 根据XYZ的属性,只有一个应该成功,例如abc
class XYZ
include DataMapper::Resource
property :id # primary key
property :abc
end
现在:
obj = XYZ.get(some_id)
obj.update(abc: 10) # Assume abc column value was 5 earlier
这可能发生在多个线程中,并且可能同时发生。此外,列abc
的新值在每个线程中都不同。一旦线程更新abc
,其他人不应该。基本上我要做的是通过datamapper运行此查询:
UPDATE `xyz` SET `abc` = 20 WHERE `id` = <some id> AND `abc` = 5
model.update
函数不允许更新属性并同时放置该属性的条件。我知道我可以直接运行SQL查询;但还有其他方法吗?
答案 0 :(得分:0)
我会做这样的事情:
XYZ.all( :id => some_id, :abc => 5 ).update( :abc => 20 )