我有一些包含静态数据的模型,我正在尝试缓存它们。我已经阅读了有关缓存的各种指南和railscast,并认为它很简单,但仍然无法弄明白。例如,我有以下模型
class ActionType < ActiveRecord::Base
def self.find(id)
Rails.cache.fetch(cache_key) { ActionType.find(id) }
end
end
但是这会产生以下错误:
wrong number of arguments (2 for 1)
使用以下stacktrace
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `find'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `send'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `find_target'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/association_proxy.rb:240:in `load_target'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/association_proxy.rb:112:in `reload'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations.rb:1219:in `action_type'
我最近升级到Rails 2.3.3(从2.0.1开始),以利用更新版本中内置的缓存内容。
此外,fyi,这些模型中的大多数是具有id和描述的简单参考表。但是,一个有30列和100多行,但仍然是真正的静态数据,如果可能的话我想缓存。除了一个之外的所有30列都是布尔和小整数(最后一个是短字符串),所以它不应占用太多内存。
答案 0 :(得分:2)
此处的一个问题是尝试覆盖ActiveRecord
的{{1}}方法。我或许会创建一个名为find
的类方法。
有了这个,你的find_cached
变量来自哪里?考虑使用id,比如
cache_key