首页 > 解决方案 > 如何为acts_as_taggable_on 缓存我的tag_counts。

问题描述

我在 erb 文件中有这个>

<%= select_tag :catalog_item_submission_tag, options_for_select(Submission.tag_counts.order('name ASC').map {|t| [t.name, t.name]}, params[:catalog_item_submission_tag]), include_blank: true, class: 'select2ify allow-clear' %>

我想缓存它,因为标签数量很大并且花费了我的网站时间:

Submission.tag_counts.count
 => 23399

而且它们不会经常更改(也许每 4 小时过期一次的缓存就足够了)。acts_as_taggable_on有没有办法使用宝石来做到这一点?

作为参考,submission有标签:

class Submission < ActiveRecord::Base
  searchkick

  acts_as_taggable_on :tags

标签: ruby-on-railscaching

解决方案


您只需要将代码包装在 中Rails.cache.fetch,如下所示:

class Submission < ActiveRecord::Base
  searchkick

  acts_as_taggable_on :tags

  def self.cashed_tags_counts
    Rails.cache.fetch("cashed_tags", expires_in: 4.hours) do
      tag_counts.order('name ASC').map {|t| [t.name, t.name]}
    end
  end
end

这是有关它的更多信息


推荐阅读