如何在rails中创建静态模型的简单缓存?

时间:2009-12-04 14:16:05

标签: ruby-on-rails

我有一些包含静态数据的模型,我正在尝试缓存它们。我已经阅读了有关缓存的各种指南和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列都是布尔和小整数(最后一个是短字符串),所以它不应占用太多内存。

1 个答案:

答案 0 :(得分:2)

此处的一个问题是尝试覆盖ActiveRecord的{​​{1}}方法。我或许会创建一个名为find的类方法。

有了这个,你的find_cached变量来自哪里?考虑使用id,比如

cache_key