当我运行时:
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
最佳答案
我认为这应该可以解决我们的问题:
改变这个
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
where 不会进行实际查询,如果您放置 .all
然后进行查询,那么您不会存储数据而只是存储查询
关于ruby-on-rails - 为什么结果是从数据库而不是缓存加载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305048/