Rails.cache ( http://guides.rubyonrails.org/caching_with_rails.html#cache-stores ) を使用できます。都市と性別の各組み合わせは、キャッシュの一意のキーです。したがって、インデックスアクションでは次のようなものになります: コントローラーコード:
def index
@users = User.same_city_opp_gender_as(current_user)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
モデルコード:
def self.same_city_opp_gender_as(user)
Rails.cache.fetch("users/#{user.city}/#{user.gender}"){ User.where(city: user.city).where(gender: user.gender).order(:updated_at) }
end
また、User クラスは都市と性別のメソッドを提供する必要があります。3 つの都市 (A、B、C) と 2 つの性別 (M、F) の場合、次のキーを持つ 6 つのキャッシュを取得します。
- 「ユーザー/A/M」
- 「ユーザー/A/F」
- 「ユーザー/B/M」
- 「ユーザー/B/F」
- 「ユーザー/C/M」
- 「ユーザー/C/F」
したがって、same_city_opp_gender_as を呼び出すたびに、キャッシュが見つからない場合は新しいキャッシュが生成され、キャッシュが存在する場合は値が取得されます。キャッシュの有効期限を考えてhttps://devcenter.heroku.com/articles/building-a-rails-3-application-with-memcacheを読んでください