2009-06-30 8 views
0

Je cherche un moyen de mettre en cache le numéro de chaque état. J'ai déjà effectué la mise en cache de compteur, mais existe-t-il un moyen de créer plusieurs colonnes counter_cache pour chaque état et de les garder à jour ou dois-je rechercher ailleurs la mise en cache de ces valeurs.Plusieurs colonnes de cache de compteur avec 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 

Il semble que ce serait juste 3 colonnes dans la base de données. Des idées?

Répondre

1

Vous auriez à faire trois colonnes, une pour chaque état, mais écrire la logique manuellement pour incrémenter/décrémenter ces compteurs, en utilisant la fonctionnalité objet sale. Rails ne fournit aucune logique automatique dans save pour ce faire.

Ainsi, dans le modèle étant compté:

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 

(Ce code est non testé, mais c'est l'idée de base)

Questions connexes