如何在最后一个方法之后使用 update_all 方法?

How to be with the update_all method after the last method?

如果编写如下代码:

User.last(5).update_all(smth: true)

然后会出现预期的错误响应:

NoMethodError (undefined method `update_all' for #<Array:0x00007fd74b25a290>)

但是如果需要获取最后N条记录并全部更新怎么办呢?

我有一个列表 (User.all)。从这个列表中,前 M 个条目我不能触摸。也就是说,我需要更新这些条目:

n = User.count - m
User.last(n).update_all(smth: true)

如果您只想更新最后 n 条记录,您可以使用 orderlimit:

User.order(created_at: :desc).limit(n).update_all(smth: true)

但在您的具体情况下,即如果您想更新除第一个 m 之外的所有记录,还有更适合的方式 SQL offset 完全符合您的需要:

User.order(created_at: :asc).offset(m).update_all(smth: true)