update_all失败后会发生什么?

时间:2016-05-01 20:50:50

标签: ruby-on-rails activerecord

RoR中有 update_all 方法

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

例如:

ActiveRecord::Base.transaction do
  users = User.active
  users.update_all avatar: 'blablablb'
end

1 个答案:

答案 0 :(得分:8)

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

但是,如果update_all调用不符合数据库级别的约束,或者在数据库中触发异常,则ActiveRecord将抛出ActiveRecord::StatementInvalid异常并将从update_all没有返回值,就像任何其他异常一样。

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

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