Foi assim que resolvi o problema de verificar alterações em vários atributos.
attrs = ["street1", "street2", "city", "state", "zipcode"]
if (@user.changed & attrs).any?
then do something....
end
O changedmétodo retorna uma matriz dos atributos alterados para esse objeto.
Ambos @user.changede attrssão matrizes para que eu possa obter a interseção (consulte o ary & other arymétodo). O resultado da interseção é uma matriz. Ao chamar any?a matriz, sou verdadeiro se houver pelo menos uma interseção.
Também muito útil, o changed_attributesmétodo retorna um hash dos atributos com seus valores originais e changesretorna um hash dos atributos com seus valores originais e novos (em uma matriz).
Você pode verificar o APIDock para quais versões suportam esses métodos.
http://apidock.com/rails/ActiveModel/Dirty