สำหรับทุกคนที่เห็นสิ่งนี้ในภายหลังในขณะนี้ (สิงหาคม 2017) ติดอันดับ google: มันเป็นสิ่งที่ควรค่าแก่การกล่าวถึงพฤติกรรมนี้จะเปลี่ยนแปลงในRails 5.2และมีคำเตือนเลิกใช้งาน Rails 5.1 เนื่องจากActiveModel :: Dirtyเปลี่ยนไปเล็กน้อย .
ฉันจะเปลี่ยนอะไร
หากคุณใช้attribute_changed?
วิธีการในการafter_*
โทรกลับคุณจะเห็นคำเตือนดังนี้
คำเตือนการattribute_changed?
เลิกใช้งาน: พฤติกรรมของภายในจากหลังการเรียกกลับจะมีการเปลี่ยนแปลงใน Rails รุ่นถัดไป ค่าตอบแทนใหม่จะสะท้อนถึงพฤติกรรมของการเรียกวิธีการหลังจากsave
กลับมา (เช่นตรงข้ามกับสิ่งที่มันกลับมาตอนนี้) เพื่อรักษาพฤติกรรมปัจจุบันให้ใช้saved_change_to_attribute?
แทน (เรียกจาก some_callback ที่ /PATH_TO/app/models/user.rb:15)
saved_change_to_attribute?
ในขณะที่มันกล่าวถึงคุณสามารถแก้ไขปัญหานี้ได้อย่างง่ายดายโดยการเปลี่ยนฟังก์ชั่นที่มี ดังนั้นสำหรับตัวอย่างเช่นจะกลายเป็นname_changed?
saved_change_to_name?
ในทำนองเดียวกันหากคุณกำลังใช้attribute_change
เพื่อรับค่าก่อนหน้าการเปลี่ยนแปลงนี้จะดำเนินการเช่นกันและส่งต่อไปนี้:
คำเตือนการattribute_change
เลิกใช้งาน: พฤติกรรมของภายในจากหลังการเรียกกลับจะมีการเปลี่ยนแปลงใน Rails รุ่นถัดไป ค่าตอบแทนใหม่จะสะท้อนถึงพฤติกรรมของการเรียกวิธีการหลังจากsave
กลับมา (เช่นตรงข้ามกับสิ่งที่มันกลับมาตอนนี้) เพื่อรักษาพฤติกรรมปัจจุบันให้ใช้saved_change_to_attribute
แทน (เรียกจาก some_callback ที่ /PATH_TO/app/models/user.rb:20)
อีกครั้งในขณะที่มันกล่าวถึงวิธีการเปลี่ยนชื่อไปซึ่งผลตอบแทนsaved_change_to_attribute
["old", "new"]
หรือการใช้งานซึ่งจะส่งกลับการเปลี่ยนแปลงทั้งหมดและสิ่งเหล่านี้สามารถเข้าถึงได้เป็นsaved_changes
saved_changes['attribute']