Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
两者都将更新对象,而无需显式告知AR更新。
Rails API说:
用于update_attribute
更新单个属性并保存记录,而无需执行正常的验证过程。这对于现有记录上的布尔标志特别有用。混入验证模块时,Base中的常规update_attribute方法将替换为该方法,默认情况下为默认方法。
用于update_attributes
从传入的哈希中更新所有属性并保存记录。如果对象无效,则保存将失败并且将返回false。
因此,如果我不想验证对象,则应使用update_attribute。如果我在before_save上进行了更新,将会导致stackoverflow吗?
我的问题是,update_attribute是否也绕过了之前的保存或只是验证。
另外,将哈希传递给update_attributes的正确语法是什么...在顶部查看我的示例。
before_save
回调中设置的)。铁代替update_attribute(:discount, 0.1) if amount > 100
你可以做discount = 0.1 if amount > 100
。update_attribute
调用save
对象,在这种情况下是不必要的,因为该语句位于before_save
回调内部,并且无论如何都会被保存。我希望这是有道理的。
update_attribute
在before_save
回调中放入一条语句?我想不到一个很好的理由。