猿问

Rails:update_attribute与update_attributes

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的正确语法是什么...在顶部查看我的示例。


qq_遁去的一_1
浏览 840回答 3
3回答

叮当猫咪

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)希望这个答案能弄清楚什么时候使用主动记录的方法。

繁华开满天机

同样值得注意的是,使用时update_attribute,要更新的所需属性不需要白名单来attr_accessible进行更新,这与update_attributes仅分配attr_accessible指定属性的批量分配方法相反。
随时随地看视频慕课网APP

相关分类

Ruby
我要回答