2009-06-30 15 views
0

私は各状態の数をキャッシュする方法を探しています。以前はカウンタキャッシュを行っていましたが、各状態ごとに複数のcounter_cacheカラムを作成して更新したり、これらの値をキャッシュする必要があります。複数のカウンタキャッシュ列と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 

データベース内に3列しかないようです。 アイデア

答えて

1

各状態ごとに1つずつ、3つの列を作成する必要がありますが、ダーティオブジェクト機能を使用してこれらのカウンタを増減するために論理を手動で書き込んでください。これを行うには、Railsは自動ロジックをsaveに提供していません。モデルがカウントされている中のSO

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 

(このコードはテストされていないが、これは基本的な考え方である)

関連する問題