Minha leitura de http://apidock.com/rails/ActiveRecord/Dirty é que você tem que chamar
..._will_change!
antes você altera o atributo. Você deve poder confirmar isso examinando as changes
em vários cenários. Atualização:acabei de testar o comportamento com um atributo de string e ele ainda salva a string atualizada, mesmo que a alteração tenha sido feita antes de
..._will_change
é chamado, então minha interpretação pode estar errada.