Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails activerecord一次锁定多行_Ruby On Rails_Activerecord_Locking - Fatal编程技术网

Ruby on rails activerecord一次锁定多行

Ruby on rails activerecord一次锁定多行,ruby-on-rails,activerecord,locking,Ruby On Rails,Activerecord,Locking,我试图更新表中符合某些条件的几行(即,所有行中的some_col=“foo”)。我希望将此更新作为事务的一部分,在事务中,我在共享模式下获取所有这些行上的锁,逐行更新,并释放共享锁 到目前为止,我阅读的文档讨论了如何在ActiveRecord中锁定单个行。但这会使事情变得效率低下,因为我必须首先执行一些.where(…)查询,遍历每一行,然后锁定它(这将从数据库中重新提取该行)。因此,我将是每行两个db抓取 我想知道在.where(…)查询本身中锁定所有符合特定条件的行的最佳方法是什么。这可能吗

我试图更新表中符合某些条件的几行(即,所有行中的some_col=“foo”)。我希望将此更新作为事务的一部分,在事务中,我在共享模式下获取所有这些行上的锁,逐行更新,并释放共享锁

到目前为止,我阅读的文档讨论了如何在ActiveRecord中锁定单个行。但这会使事情变得效率低下,因为我必须首先执行一些.where(…)查询,遍历每一行,然后锁定它(这将从数据库中重新提取该行)。因此,我将是每行两个db抓取

我想知道在.where(…)查询本身中锁定所有符合特定条件的行的最佳方法是什么。这可能吗?如果没有,是否有更好的方法可以更有效地锁定某组行。锁定表不是一个选项

谢谢

试试这个

我假设您的模型是
Item
,如示例所示,执行以下操作:

Item.lock.joins ....
e、 t.c.并构建所需的select,以便在大视图/结果中显示所有行


这可能正是您想要的。

这是否适用于.where方法?我只需要在一个表中选择多行,所以我不想产生连接的开销。我尝试使用Item.lock.where(:条件),但它不起作用。建议?应该有用。我只是在我的一个项目上尝试了一下,结果成功了。当你说它不起作用时,你会得到什么错误?