【问题标题】:What happens when update_all fails?update_all 失败时会发生什么?
【发布时间】:2016-05-01 20:50:50
【问题描述】:

RoR中有update_all方法

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

例如:

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

【问题讨论】:

  • update_all 跳过 ActiveRecords 的正常验证和回调。您基本上是将查询直接插入数据库。 update_all 返回的唯一错误是您将属性留空(无参数)。任何错误或异常都可能来自Arel。您应该尝试使用无效信息运行 update_all 并查看它返回的内容。
  • 我的意思是db有错误?
  • 这就是我要说的。试试看。如果您不确定进入update_all 的数据,我建议您不要使用它

标签: ruby-on-rails activerecord


【解决方案1】:

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

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

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

  • 递减!
  • 递减计数器
  • 增量!
  • increment_counter
  • 切换!
  • 触摸
  • update_attribute
  • update_column
  • update_counters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多