cache_fuでエリアデータ等のマスターデータをキャッシュしてみる

一応動機

cache_fuの具体的なサンプルがちょっと少なめなので一応晒してみる。

シチュエーション

railsのviewにてエリア選択のセレクトボックスを出力する。エリアデータそのものはそうそう変わるものではないのでキャッシュして高速化wしたい。

view

<%=collection_select :user, :area_id, Area.select_list,:id, :name%>

model

class Area < ActiveRecord::Base
  # マスターテーブルなのでキャッシュします
  acts_as_cached :ttl => 10.minutes

  def self.select_list(set_unselected = true)
    return self.get_cache(:select_list){
      items = self.find(:all, :order => 'id ASC')
      items.unshift(self.new{|item|item.name = "地域選択";item.id = 0}) if set_unselected
    }
  end
end

最後に

間違っているところがあったらコメントで突っ込んでいただければ幸いです。