Так я решил проблему проверки изменений в нескольких атрибутах.
attrs = ["street1", "street2", "city", "state", "zipcode"]
if (@user.changed & attrs).any?
then do something....
end
changed
Метод возвращает массив атрибутов измененных для этого объекта.
Оба @user.changed
и attrs
являются массивами, поэтому я могу получить пересечение (см. ary & other ary
Метод). Результатом пересечения является массив. Вызывая any?
массив, я получаю истину, если есть хотя бы одно пересечение.
Также очень полезно, changed_attributes
метод возвращает хэш атрибутов с их исходными значениями иchanges
возвращает хэш атрибутов с их исходными и новыми значениями (в массиве).
Вы можете проверить APIDock, для каких версий поддерживаются эти методы.
http://apidock.com/rails/ActiveModel/Dirty