gpt4 book ai didi

ruby-on-rails - 如何使用acts_as_taggable_on 缓存标签?

转载 作者:行者123 更新时间:2023-12-04 14:06:24 25 4
gpt4 key购买 nike

我有带标签上下文的模型:

class Product < ActiveRecord::Base
acts_as_taggable_on :categories
end

我正在尝试初始化标签缓存:
class AddCachedCategoryListToProducts < ActiveRecord::Migration
def self.up
add_column :products, :cached_category_list, :string
Product.reset_column_information
products = Product.all
products.each { |p| p.save_cached_tag_list }
end
end

但是 cached_category_list不初始化。我做错了什么?有没有人可以使用这个 gem 的缓存(我的版本是 2.0.6)?

最佳答案

好吧,今天我遇到了同样的问题。
我终于解决了,我的迁移缓存了所需的标签。
您的迁移问题有两个方面:

  • 设置缓存的 ActsAsTaggable 代码需要在列信息重置后再次运行。否则,不会创建缓存方法(请参阅 https://github.com/mbleigh/acts-as-taggable-on/blob/v2.0.6/lib/acts_as_taggable_on/acts_as_taggable_on/cache.rb )
  • 您正在调用的方法 save_cached_tag_list 不会自动保存记录,因为它是作为 before_save Hook 安装的,并且它不想创建无限循环。所以你必须调用保存。

  • 因此,尝试用以下内容替换您的迁移,它应该可以工作:
    class AddCachedCategoryListToProducts < ActiveRecord::Migration
    def self.up
    add_column :products, :cached_category_list, :string
    Product.reset_column_information
    # next line makes ActsAsTaggableOn see the new column and create cache methods
    ActsAsTaggableOn::Taggable::Cache.included(Product)
    Product.find_each(:batch_size => 1000) do |p|
    p.category_list # it seems you need to do this first to generate the list
    p.save! # you were missing the save line!
    end
    end
    end

    那应该这样做。

    关于ruby-on-rails - 如何使用acts_as_taggable_on 缓存标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946783/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com