Обновление оптимистичной блокировки Rails в цикле, кажется, работает, пока я не проверю снаружи цикла
Я использую оптимистическую блокировку на модели Rails. Внутри цикла я обновляю и сохраняю эту модель (или, скорее, многие экземпляры этой модели).
Из цикла я вывожу значения "до" и "после", и поле, по-видимому, корректно обновляется. Но потом, когда я нахожу модели по идентификатору, я вижу, что поле не обновляется. Кто-нибудь может определить мою ошибку?
class Usage::LeadDistributionWeight < ActiveRecord::Base
attr_accessible :agent_id, :tag_value_id, :weight, :premium_limit, :countdown, :lock_version, :tag_value
def increment_countdown!
self.countdown = self.countdown + self.weight
save
rescue ActiveRecord::StaleObjectError
attempts_to_crement_countdown ||= 0
attempts_to_crement_countdown += 1
self.increment_countdown! unless attempts_to_crement_countdown > 5
false
end
def self.increment_countdowns parent_id, lead_type_id
if lead_type_id.present?
joins(:agent)
.where("#{reflect_on_association(:agent).table_name}.parent_id = ?", parent_id)
.where(tag_value_id:lead_type_id)
.all(readonly:false).each { |weight|
prev = weight.countdown
if weight.increment_countdown!
puts "#{prev} differs from #{weight.countdown}"
else
puts "no difference!"
end
}
end
end
end