2009-06-30 7 views
0

Ich bin auf der Suche nach einer Möglichkeit, die Anzahl der einzelnen Staaten zu cachen. Ich habe Counter-Caching schon einmal gemacht, aber gibt es eine Möglichkeit, mehrere counter_cache-Spalten für jeden Zustand zu erstellen und sie auf dem neuesten Stand zu halten, oder sollte ich woanders nach Caching dieser Werte suchen.Mehrere Counter-Cache-Spalten mit Aasm

aasm_column :state 
aasm_initial_state :unopened 

aasm_state :unopened 
aasm_state :contacted 
aasm_state :closed 

aasm_event :contact do 
    transitions :to => :contacted, :from => [:unopened] 
end 

aasm_event :close do 
    transitions :to => :closed, :from => [:contacted] 
end 

Es scheint, als wäre es nur 3 Spalten in der Datenbank. Irgendwelche Ideen?

Antwort

1

Sie müssten drei Spalten ausführen, eine für jeden Status, aber schreiben Sie die Logik manuell, um diese Zähler zu erhöhen oder zu verringern, indem Sie die Funktion für unsauberes Objekt verwenden. Rails bietet dafür keine automatische Logik in save.

So im Modell gezählt:

after_create :increment_counter 
after_save :update_counters 
after_destroy :decrement_counter 

def increment_counter 
    self.parent.increment("#{self.state}_counter") 
end 

def decrement_counter 
    self.parent.decrement("#{self.state}_counter") 
end 

def update_counters 
    return unless self.state_changed? 
    self.parent.decrement("#{self.state_was}_counter") 
    self.parent.increment("#{self.state}_counter") 
end 

(Dieser Code ist nicht getestet, aber das ist die Grundidee)

Verwandte Themen