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 changed
método retorna uma matriz dos atributos alterados para esse objeto.
Ambos @user.changed
e attrs
são matrizes para que eu possa obter a interseção (consulte o ary & other ary
mé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_attributes
método retorna um hash dos atributos com seus valores originais e changes
retorna 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