Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
ทั้งสองอย่างนี้จะอัปเดตวัตถุโดยไม่ต้องแจ้งให้ AR ทราบเพื่ออัปเดตอย่างชัดเจน
Rails API พูดว่า:
สำหรับ update_attribute
อัพเดตแอททริบิวต์เดียวและบันทึกข้อมูลโดยไม่ต้องผ่านขั้นตอนการตรวจสอบความถูกต้องตามปกติ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับแฟล็กบูลีนในระเบียนที่มีอยู่ เมธอด update_attribute ปกติในฐานจะถูกแทนที่ด้วยสิ่งนี้เมื่อโมดูลการตรวจสอบความถูกต้องถูกผสมซึ่งเป็นค่าเริ่มต้น
สำหรับ update_attributes
อัปเดตคุณลักษณะทั้งหมดจาก Hash ที่ส่งผ่านและบันทึกบันทึก หากวัตถุไม่ถูกต้องการบันทึกจะล้มเหลวและจะส่งคืนค่าเท็จ
ดังนั้นหากฉันไม่ต้องการให้วัตถุตรวจสอบความถูกต้องฉันควรใช้ update_attribute จะเกิดอะไรขึ้นถ้าฉันมีการอัปเดตนี้ก่อนวันที่บันทึกมันจะสแต็คโอเวอร์โฟลว์หรือไม่
คำถามของฉันคือ 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
โทรกลับ? ฉันไม่สามารถคิดเหตุผลที่ดีสำหรับเรื่องนี้