我想更新updated_at
一些记录:
users = User.in_mailing_list
users.update_all(:updated_at => Time.now)
有没有为此目的的捷径,比如users.touch_all
方法?
我想更新updated_at
一些记录:
users = User.in_mailing_list
users.update_all(:updated_at => Time.now)
有没有为此目的的捷径,比如users.touch_all
方法?
不确定 rhernando 的答案是否适用于旧版本的 Ruby,但我认为这是一种更清晰的方法,适用于 Ruby 2+
users.each(&:touch)
你可以这样做:
User.update_all({updated_at: Time.now}, {id: user_ids})
注意:大括号是必需的,否则它会尝试设置updated_at
and id
,而不是更新updated_at
user_ids id
中的位置
干杯!
如果您需要触摸ActiveRelaton
记录,则必须使用update_all
方法。它在单个事务中触及多条记录:
User.update_all(updated_at: Time.current)
User.where(active: true).update_all(active: false)
但是如果你有Array
记录,在这种情况下,你只能each
使用update
users.each { |user| user.update(active: true) }
这种情况的缺点:对于每个都user
将是一个单独的事务
不知道从什么时候开始,但解决方案要简单得多:
users = User.in_mailing_list
users.touch_all
或者,如果您不想实例化用户记录:
users = User.in_mailing_list.touch_all
这应该这样做:
User.update(users, :updated_at => Time.now)