2012-11-09 79 views
1

當我運行:爲什麼從db而不是緩存加載結果?

IpPermission.blacklist.pluck(:ip) 

我得到的結果:

=> ["127.0.0.11012q", "50.36.46.48"] 

如果我手動更改任何在ip_permissions表中的行,並再次運行IpPermission.blacklist.pluck(:ip)。它顯示更新的結果。它不應該從緩存中加載結果,而不是直接從數據庫中加載結果?

我的模型看起來像:

class IpPermission < ActiveRecord::Base 
    validates_presence_of :ip, :note, :category 
    validates_uniqueness_of :ip, :scope => [:category] 
    validates :category, :inclusion => { :in => ['whitelist', 'blacklist'] } 

    def self.whitelist 
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist') } 
    end 

    def self.blacklist 
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist') } 
    end 
end 
+0

我希望你正在開發嘗試這些東西,你能告訴我什麼是' config.action_controller.perform_caching'在您的development.rb文件中? – AnandVeeramani

+0

將其設置爲'false' –

+0

您可以嘗試將其設置爲「true」並重新啓動服務器?並看看它是否有效? – AnandVeeramani

回答

3

我想這應該解決我們的問題:

更改此

def self.whitelist 
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist') } 
    end 

    def self.blacklist 
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist') } 
    end 

這個

def self.whitelist 
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist').all } 
    end 

    def self.blacklist 
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist').all } 
    end 

的地方不做實際的查詢y,如果你把.all那麼你做查詢,所以你沒有存儲數據,但你只是存儲查詢

+0

完美!是的,它似乎是緩存ActiveRelation而不是結果。感謝那! –

相關問題