Minha leitura de https://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.