[英]How to add a WHERE clause in UPDATE query in Datamapper
我有一个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查询; 但是还有其他办法吗?
我会做这样的事情:
XYZ.all( :id => some_id, :abc => 5 ).update( :abc => 20 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.