如何在最后一个方法之后使用 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
条记录,您可以使用 order
和 limit
:
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)
如果编写如下代码:
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
条记录,您可以使用 order
和 limit
:
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)