Mehrere Zähler Cache Spalten mit AASM
-
21-08-2019 - |
Frage
Ich bin auf der Suche nach einer Möglichkeit, die Anzahl der einzelnen Staaten cachen. Ich habe, bevor der Zähler Caching getan, aber gibt es eine Möglichkeit, mehrere counter_cache Spalten für jeden Staat zu schaffen und halten sie aktualisiert oder sollte ich an anderer Stelle für diese Werte Caching.
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, wie es nur 3 Spalten in der Datenbank sein würde. Irgendwelche Ideen?
Lösung
würden Sie haben drei Spalten zu tun, einen für jeden Staat, sondern Logik schreiben manuell diese Zähler / Abnahme zu erhöhen, mit schmutzigem Objekt Funktionalität. Rails bietet keine automatische Logik in save
dies zu tun.
So im Modell gezählt werden:
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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow