您可以使用 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
此外,用户类必须提供城市和性别方法。对于 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