使用update_all更新多个记录

时间:2014-06-10 18:23:00

标签: ruby-on-rails

所以我试图在我的用户中为它的角色及其plan_id更新一些东西..我在控制台中想出了一些脏东西,但每次我都尝试使用update_all类似的方式我没有得到哪里。我想我错过了什么......这是我原来的控制台方式;

expired_subscription_user_ids = Subscription.where("expiry_date < ?", Time.now.beginning_of_day).pluck(:user_id)
User.where(:id => cancelled_subscription).each do |user|
   user.role = 'cancelled'
   user.plan_id = 'cancelled'
   user.save
end

这是同样的事情,但使用更新所有这些都不适合我。

User.where(:id => cancelled_subscription).each do |user|
   user.update_all(:role => 'subscriber', :plan_id => 'subscriber')
end

因此,所有使用cancelled_subscription的用户都会有自己的角色和plan_id。

1 个答案:

答案 0 :(得分:5)

您必须在.update_all对象上使用ActiveRecord::Relation方法,如下所示:

scope = User.where(:id => cancelled_subscription)
scope.update_all(:role => 'subscriber', :plan_id => 'subscriber')

文档:http://apidock.com/rails/ActiveRecord/Relation/update_all


文档中的一个有趣的评论,来自&#34; openface&#34;:

  

请注意,使用update_all()时,ActiveRecord 不会更新时间戳字段(updated_at / updated_on)。