所以我试图在我的用户中为它的角色及其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。
答案 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)。