Ruby on rails 覆盖Rails 4中给定模型的所有查询
在Rails中,是否有可能覆盖给定模型上的所有查询,而不考虑它们所经历的关联。例如: 我有一个Countries模型,在我的应用程序中被几个模型引用。用户属于一个国家,城市属于一个国家,依此类推 因为Countries表很少更改,而且记录数量很少,所以我决定缓存整个内容,每当应用程序中有按ID查找国家时,我希望它通过该缓存,而不是查询数据库 我在Country模型中的缓存代码如下所示:Ruby on rails 覆盖Rails 4中给定模型的所有查询,ruby-on-rails,caching,ruby-on-rails-4,Ruby On Rails,Caching,Ruby On Rails 4,在Rails中,是否有可能覆盖给定模型上的所有查询,而不考虑它们所经历的关联。例如: 我有一个Countries模型,在我的应用程序中被几个模型引用。用户属于一个国家,城市属于一个国家,依此类推 因为Countries表很少更改,而且记录数量很少,所以我决定缓存整个内容,每当应用程序中有按ID查找国家时,我希望它通过该缓存,而不是查询数据库 我在Country模型中的缓存代码如下所示: after_save :expire_all after_destroy :expire_all def s
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.where:contraction=>5个国家。where:active=>true。等等。我希望所有这些都在缓存表上查询,而不是在真实表上查询。所以我想我要寻找的是一种在模型中定义所有在缓存对象上执行的查询的方法,而不是数据库。某种程度上回答了我自己的问题。。。我没有找到一种方法来完全实现我想要的,但是我所做的是在引用它的每个模型中重写一个Country getter方法,以便它通过缓存的变量 国家/地区模型中的其他方法: 在关联模型中,用户、城市等: 关于Heroku上memcache性能的旁注。 我在Heroku上主持这个网站,免费计划中有Memcachier插件。在实现这个解决方案之后,我没有注意到性能有多大的提高,因为对缓存的调用所花费的时间与在数据库上执行这个简单的国家/地区查找所需的时间相似。因此,为了挤出更多的性能,我决定将整个国家列表存储在类变量中:
def self.all_cached
@@all_countries ||= Country.all
end
def expire_all
@@all_countries = nil
end
我很抱歉,但我刚刚意识到我并不真正理解缓存,理解缓存需要花费比我现在愿意投资更多的时间。我很抱歉在没有充分了解的情况下回答。我删除了我的答案,希望其他人会回应。
class User
belongs_to :country
def country
Country.cached_country(country_id)
end
end
def self.all_cached
@@all_countries ||= Country.all
end
def expire_all
@@all_countries = nil
end