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的正确语法是什么...在顶部查看我的示例。
3 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
update_attribute
此方法无需调用基于模型的验证即可更新对象的单个属性。
obj = Model.find_by_id(params[:id])
obj.update_attribute :language, “java”
update_attributes
该方法更新单个对象的多个属性,并通过基于模型的验证。
attributes = {:name => “BalaChandar”, :age => 23}
obj = Model.find_by_id(params[:id])
obj.update_attributes(attributes)
希望这个答案能弄清楚什么时候使用主动记录的方法。
繁华开满天机
TA贡献1816条经验 获得超4个赞
同样值得注意的是,使用时update_attribute,要更新的所需属性不需要白名单来attr_accessible进行更新,这与update_attributes仅分配attr_accessible指定属性的批量分配方法相反。
- 3 回答
- 0 关注
- 839 浏览
添加回答
举报
0/150
提交
取消