Sanırım her şeyi elimden aldım, ama emin olmamız için OL'i mükemmel bir şekilde anladığımdan emin değilim. Genel olarak, diyelim ki bir foo'yu güncel tutmak için bir takımdayız. Bir odadayım ve zaman kazanmaya karar verdim foo'yu kendim güncelleyeceğim. Bu yüzden güncellemeye başladım. Bir dakika sonra aynı fikre sahipsiniz ve güncellemek için düzenleme sayfasına giriş yapın. İlk önce bitirirsem ne olur? İlk önce bitirirsen ne olur? Başarısız olduğu bir yapılandırmada, düzenleme yapan biri ile birisinin okuması arasındaki farkı nasıl ayırt eder. I catch
ve kilidi güncellemek için yeniden yüklersem tüm değişikliklerimi kaybederim, bu nasıl çözülür? Burada, güncellemeyi yeniden yapmak kolaydır, ancak potansiyel olarak daha karmaşık bir form nesnesinin bir parçasıdır.Sabit Nesne hatası alıyor. İyimser Kilitleme: Nasıl çalışır?
Belirli bir sorun, tarayıcımda bir kopyasını yüklediğimde (daha sonra çıkabileceğim) geldi, daha sonra bunu unutup daha sonra konsolumdan birinde (ayrıca kilitle: 0?) Konsolumda bir tane güncelleştirilemedi eski nesne hatası. Tarayıcı şey fark ettim. Konsolumu kapattı. Tarayıcımı yeniden yüklemeyi denedim ve eski nesne hatası da aldım. İşte başarısız koddur:
=> 7: self.update_attributes({
8: failed_view_attempts: self.failed_view_attempts += 1,
9: failed_view_at: Time.now
10: })
11: end
(byebug) self
#<Product id: 12... lock_version: 0>
#=> ActiveRecord::StaleObjectError (Attempted to update a stale object: Product.)
şeyler denedim: Başka bir örnek ben bir after_initialize
geri aramasında puts "CALLED !!!!"
eklendi yüklenen olsaydı
görmek için, ancak yalnızca bir kez basılmış.
Ve hatadan kurtarmak sonra self.changed
kontrol ve sıfıra lock_version
sütun varsayılan olarak ayarlamak için geri ["updated_at", "failed_view_attempts", "failed_view_at"]
Ancak, birisini düzenlerken düzenleyeceğim aynı satırın örneğini çağırırsa, sürüm numarasını çarpacaktır. Yüklemeye dayanıyor, onunla ne yaptığına değil, doğru mu? – MCB
gerçekten yüklemezseniz, sürüm numarası aynı kalır, aksi halde sürüm numarası yalnızca güncelleme üzerine çarpılır (yani: sürüm = sürüm 2 = sürüm = 1) ve kayıtla eşleşmezse birçok güncelleme olur nerede o zaman eski nesne hatası alırsınız. Sayfa yükleme ile ilgili sorun, önbelleğe alınmış olması ve nesneyi DB'den yeniden yüklememeniz olabilir. –
Evet, önbelleğe alınmış bir sürümü kullanan tarayıcı zaten tanıdığım bir şeydir – MCB