Ruby before_validation dispara loop infinito de retorno de chamada

@Product Model possui um atributo_1. Se o recálculo for necessário para o atributo_1, antes da validação será chamada. DandoSystemStackError: stack level too deep Porqueself.save! aciona obefore_validation. Como parar o loop infinito de retorno de chamad

before_validation :method_1, :if => :recalculation_required_attribute

Estou usando bloqueio otimista usandolock_version. 'update_all' não aumentará olock_version. Então, eu estou usandosave!. Ele está chamando a aparência infinita da chamada de volta.

def method_1
    ####
    ####
    if self.lock_version == Product.find(self.id).lock_version
       Product.where(:id => self.id).update_all(attributes)
       self.attributes = attributes
       self.save!
    end
end

questionAnswers(1)

yourAnswerToTheQuestion