Mi lectura de http://apidock.com/rails/ActiveRecord/Dirty
es que tienes que llamar a ..._will_change!
antes cambias el atributo. Debería poder confirmar esto examinando changes
bajo varios escenarios.
Actualización:acabo de probar el comportamiento con un atributo de cadena y todavía guarda la cadena actualizada incluso si el cambio se realizó antes de ..._will_change
se llama, por lo que mi interpretación puede estar mal.