Colonne multiple di cache contatore con SAMA
-
21-08-2019 - |
Domanda
Sto cercando un modo per memorizzare nella cache il numero di ogni stato. Ho fatto contatore caching prima, ma c'è un modo per creare più colonne counter_cache per ogni stato e tenerli aggiornati o dovrei guardare altrove per la memorizzazione nella cache di questi valori.
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
Sembra che sarebbe solo 3 colonne nel database. Tutte le idee?
Soluzione
Si dovrebbe fare tre colonne, una per ogni stato, ma scrivere la logica manualmente per aumentare / diminuire i contatori, utilizzando la funzionalità oggetto sporco. Rails non fornisce alcuna logica automatica in save
per fare questo.
Quindi, nel modello viene contato:
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
(Questo codice non è testato, ma questa è l'idea di base)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow