Đối với bất kỳ ai nhìn thấy điều này sau này, vì hiện tại (tháng 8 năm 2017) đứng đầu google: Điều đáng nói, hành vi này sẽ được thay đổi trong Rails 5.2 và có cảnh báo không được chấp nhận kể từ Rails 5.1, vì ActiveModel :: Dirty đã thay đổi một chút .
Tôi thay đổi cái gì?
Nếu bạn đang sử dụng attribute_changed?
phương thức trong after_*
-callbacks, bạn sẽ thấy một cảnh báo như:
CẢNH BÁO KHAI THÁC: Hành vi attribute_changed?
bên trong sau khi gọi lại sẽ thay đổi trong phiên bản tiếp theo của Rails. Giá trị trả về mới sẽ phản ánh hành vi gọi phương thức sau khi save
trả về (ví dụ ngược lại với giá trị trả về bây giờ). Để duy trì hành vi hiện tại, sử dụng saved_change_to_attribute?
thay thế. (được gọi từ some_callback tại /PATH_TO/app/models/user.rb:15)
Vì nó đề cập, bạn có thể khắc phục điều này một cách dễ dàng bằng cách thay thế chức năng bằng saved_change_to_attribute?
. Vì vậy, ví dụ, name_changed?
trở thành saved_change_to_name?
.
Tương tự, nếu bạn đang sử dụng attribute_change
để lấy các giá trị trước-sau, điều này cũng thay đổi và ném như sau:
CẢNH BÁO KHAI THÁC: Hành vi attribute_change
bên trong sau khi gọi lại sẽ thay đổi trong phiên bản tiếp theo của Rails. Giá trị trả về mới sẽ phản ánh hành vi gọi phương thức sau khi save
trả về (ví dụ ngược lại với giá trị trả về bây giờ). Để duy trì hành vi hiện tại, sử dụng saved_change_to_attribute
thay thế. (được gọi từ some_callback tại /PATH_TO/app/models/user.rb:20)
Một lần nữa, như nó đề cập, phương thức thay đổi tên saved_change_to_attribute
mà trả về ["old", "new"]
. hoặc sử dụng saved_changes
, trả về tất cả các thay đổi và những thay đổi này có thể được truy cập dưới dạng saved_changes['attribute']
.