activerecord一次锁定几行

时间:2011-10-28 07:18:11

标签: ruby-on-rails activerecord locking

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

我到目前为止阅读的文档讨论了如何锁定ActiveRecord中的各个行。但这会使事情效率低下,因为我必须首先执行一些.where(...)查询,遍历每一行并锁定它(从数据库中重新获取行)。所以我每行将获得两次db ...

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

谢谢!

1 个答案:

答案 0 :(得分:3)

试试这个

http://guides.rubyonrails.org/active_record_querying.html#pessimistic-locking

我们假设您的模型在示例中为Item,请执行以下操作:

Item.lock.joins ....

e.t.c。并构建您想要的选择,以便将所有行放在大视图/结果中。

这可能是你想要的。