Rails 7:如何跳过验证执行模型更新操作?
如何跳过ActiveRecord验证完成模型属性更新?
问题场景
我在更新某模型的部分属性时,执行了以下代码:
my_model.update!(attr1: 'val 1', attr2: 'val 2', attr3: 'val 3')
触发了如下错误:
ActiveRecord::RecordInvalid: Validation failed: MyModel must exist, MyModel2 must exist (ActiveRecord::RecordInvalid)
请问是否可以直接通过update方法跳过验证完成更新?
解决方案
可以跳过验证完成更新,但不能直接用update或update!方法(这两个都会强制走验证逻辑),推荐两种实现方式:
- 直接更新数据库字段(跳过验证和回调):使用实例方法
update_columns,它会直接修改数据库中的对应字段,不会触发任何验证、回调,也不会自动更新updated_at时间戳,用法示例:
my_model.update_columns(attr1: 'val 1', attr2: 'val 2', attr3: 'val 3')
- 跳过验证但保留回调:如果需要保留回调逻辑,可先通过
assign_attributes设置属性,再用save(validate: false)跳过验证保存:
my_model.assign_attributes(attr1: 'val 1', attr2: 'val 2', attr3: 'val 3') my_model.save(validate: false)
内容的提问来源于stack exchange,提问作者user984621
相关产品推荐
相关产品推荐

