Модель продукта имеет атрибут_1.Если для атрибута_1 требуется перерасчет, то вызовет before_validation.Это дает SystemStackError: stack level too deep
, потому что self.save!
вызывает before_validation
.Как остановить бесконечный цикл обратного вызова.
before_validation :method_1, :if => :recalculation_required_attribute
Я использую оптимистическую блокировку с использованием lock_version
.update_all не увеличит lock_version
.Поэтому я использую save!
.Это вызывает бесконечный вид обратного вызова.
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