สำหรับทุกคนที่เห็นสิ่งนี้ในภายหลังในขณะนี้ (สิงหาคม 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_changessaved_changes['attribute']