【发布时间】:2013-11-30 07:16:39
【问题描述】:
是否可以在 Rails 中覆盖给定模型上的所有查询,而不管它们通过什么关联。示例:
我有一个Counties 模型,它被我的应用程序中的多个模型引用。一个Userbelongs to一个Country,一个Citybelongs to一个Country,等等。
因为Countries 表很少更改并且记录数量很少,所以我决定缓存整个内容,并且每当在应用程序中按 ID 查找国家/地区时,我希望它通过该缓存而不是查询数据库。
Country 模型中的缓存代码如下所示:
after_save :expire_all
after_destroy :expire_all
def self.all_cached
Rails.cache.fetch('Countries.all') { all }
end
def expire_all
Rails.cache.delete('Countries.all')
end
现在,我想避免进入应用程序中的每个可能位置并更改逻辑以使用该缓存。
我正在寻找一种方法,让User.country.name、City.country.name 等现有代码在Country 模型中处理以利用缓存值。
这可能吗?
更新
在应用程序的其他地方,我将拥有Country.where(:continent => 5) Country.where(:active => true)。等等。我希望在缓存表而不是真实表上查询所有这些。所以我想我正在寻找的是一种在模型中定义要在我的缓存对象而不是数据库上执行的所有查询的方法。
【问题讨论】:
-
我很抱歉,但我刚刚意识到我并不真正了解缓存,而且我需要花更多的时间来理解它,而不是我现在愿意投入的时间。我很抱歉在没有足够知识的情况下回答。我已删除我的答案,希望其他人能回复。
标签: ruby-on-rails caching ruby-on-rails-4