Đây là cách tôi giải quyết vấn đề kiểm tra các thay đổi trong nhiều thuộc tính.
attrs = ["street1", "street2", "city", "state", "zipcode"]
if (@user.changed & attrs).any?
then do something....
end
Các changed
phương thức trả về một mảng các thuộc tính thay đổi cho đối tượng đó.
Cả hai @user.changed
và attrs
là mảng để tôi có thể có giao điểm (xem ary & other ary
phương thức). Kết quả của giao điểm là một mảng. Bằng cách gọi any?
vào mảng, tôi nhận được đúng nếu có ít nhất một giao lộ.
Cũng rất hữu ích, changed_attributes
phương thức trả về một hàm băm của các thuộc tính với các giá trị ban đầu của chúng và changes
trả về một hàm băm của các thuộc tính với các giá trị ban đầu và mới của chúng (trong một mảng).
Bạn có thể kiểm tra APIDock xem phiên bản nào hỗ trợ các phương thức này.
http://apidock.com/rails/ActiveModel/Denty