Używanie Rails 3.1.3 i próbuję dowiedzieć się, dlaczego nasze pamięci podręczne liczników nie są poprawnie aktualizowane po zmianie identyfikatora rekordu nadrzędnego za pomocą update_attributes.Railsy counter_cache nie aktualizują się prawidłowo
class ExhibitorRegistration < ActiveRecord::Base
belongs_to :event, :counter_cache => true
end
class Event < ActiveRecord::Base
has_many :exhibitor_registrations, :dependent => :destroy
end
describe ExhibitorRegistration do
it 'correctly maintains the counter cache on events' do
event = Factory(:event)
other_event = Factory(:event)
registration = Factory(:exhibitor_registration, :event => event)
event.reload
event.exhibitor_registrations_count.should == 1
registration.update_attributes(:event_id => other_event.id)
event.reload
event.exhibitor_registrations_count.should == 0
other_event.reload
other_event.exhibitor_registrations_count.should == 1
end
end
Ta specyfikacja nie powiedzie się, że licznik pamięci podręcznej zdarzenia nie jest zmniejszany.
1) ExhibitorRegistration correctly maintains the counter cache on events
Failure/Error: event.exhibitor_registrations_count.should == 0
expected: 0
got: 1 (using ==)
Czy powinienem się spodziewać, że to zadziała, czy muszę ręcznie śledzić zmiany i samemu aktualizować licznik?
Dzięki @ mu-is-too-short to zdecydowanie rozwiązuje problem. Myślę, że to na pewno zasługuje na uwagę w samym ActiveRecord, przyjrzę się złożeniu łatki. –
@MichaelGuterl: Fajnie, nie zapomnij dołączyć aktualizacji dokumentacji ze swoim patchem :) –
@MichaelGuterl: Możesz również spróbować podejścia Bena. Przechodzę ponownie przez kod Railsowy, aby zobaczyć, czy coś przeoczyłem. Może to być po prostu błąd i słaba/niekompletna dokumentacja. –