最佳答案
obj.update_attribute(:only_one_field, 'Some Value')
obj.update_attributes(field1: 'value', field2: 'value2', field3: 'value3')
这两种方法都可以更新对象,而无需显式地告诉 ActiveRecord 进行更新。
Rails API 表示:
Update _ tribute 更新属性
更新单个属性并保存记录,而不必经过正常的验证过程。这对于现有记录上的布尔标志特别有用。当混合了验证模块(默认情况下是这样)时,Base 中的常规 update _ Attribute 方法将被替换为 this。
Update _ properties 更新属性
更新传入 Hash 中的所有属性并保存记录。如果对象无效,则保存将失败,并返回 false。
因此,如果我不想验证对象,我应该使用 #update_attribute
。如果我在 #before_save
上有这个更新,它会堆栈溢出吗?
我的问题是 #update_attribute
是否也绕过了之前的保存或只是验证。
另外,将散列传递给 #update_attributes
的正确语法是什么... ... 请查看顶部的示例。