update_all失败后会发生什么?

Gle*_*sky 11 activerecord ruby-on-rails

RoR中有update_all方法

如果update_all失败,它会返回什么?它会引发异常吗?

例如:

ActiveRecord::Base.transaction do
  users = User.active
  users.update_all avatar: 'blablablb'
end
Run Code Online (Sandbox Code Playgroud)

Ant*_*y E 10

update_all是跳过验证和回调的众多方法之一.因此,调用时不会运行任何ActiveRecord验证update_all.

但是,如果update_all调用不符合数据库级别的约束,或以其他方式触发数据库中的异常,则ActiveRecord将抛出ActiveRecord::StatementInvalid异常,并且会在update_all不返回值的情况下中断,就像任何其他异常一样.

跳过验证的其他ActiveRecord方法包括:

  • 递减!
  • decrement_counter
  • 增量!
  • increment_counter
  • 切换!
  • 触摸
  • update_attribute
  • update_column
  • update_counters