Ruby on rails activerecord一次锁定多行
我试图更新表中符合某些条件的几行(即,所有行中的some_col=“foo”)。我希望将此更新作为事务的一部分,在事务中,我在共享模式下获取所有这些行上的锁,逐行更新,并释放共享锁 到目前为止,我阅读的文档讨论了如何在ActiveRecord中锁定单个行。但这会使事情变得效率低下,因为我必须首先执行一些.where(…)查询,遍历每一行,然后锁定它(这将从数据库中重新提取该行)。因此,我将是每行两个db抓取 我想知道在.where(…)查询本身中锁定所有符合特定条件的行的最佳方法是什么。这可能吗?如果没有,是否有更好的方法可以更有效地锁定某组行。锁定表不是一个选项 谢谢 试试这个 我假设您的模型是Ruby on rails activerecord一次锁定多行,ruby-on-rails,activerecord,locking,Ruby On Rails,Activerecord,Locking,我试图更新表中符合某些条件的几行(即,所有行中的some_col=“foo”)。我希望将此更新作为事务的一部分,在事务中,我在共享模式下获取所有这些行上的锁,逐行更新,并释放共享锁 到目前为止,我阅读的文档讨论了如何在ActiveRecord中锁定单个行。但这会使事情变得效率低下,因为我必须首先执行一些.where(…)查询,遍历每一行,然后锁定它(这将从数据库中重新提取该行)。因此,我将是每行两个db抓取 我想知道在.where(…)查询本身中锁定所有符合特定条件的行的最佳方法是什么。这可能吗
Item
,如示例所示,执行以下操作:
Item.lock.joins ....
e、 t.c.并构建所需的select,以便在大视图/结果中显示所有行
这可能正是您想要的。这是否适用于.where方法?我只需要在一个表中选择多行,所以我不想产生连接的开销。我尝试使用Item.lock.where(:条件),但它不起作用。建议?应该有用。我只是在我的一个项目上尝试了一下,结果成功了。当你说它不起作用时,你会得到什么错误?