2010-10-15 55 views
6

我有標籤的上下文模型:如何使用acts_as_taggable_on緩存標籤?

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不初始化。我做錯了什麼?有沒有人可以使用這個寶石緩存(我的版本是2.0.6)?

回答

-3

如果您將此與自有代碼結合使用,則可能是問題所在。 望着寶石的代碼,它似乎擁有標籤的高速緩存不支持

希望這有助於

最佳, Ĵ

13

好,今天我有同樣的問題。 我終於解決了它,我的遷移緩存了所需的標籤。 與遷移的問題是雙重的:

  1. 其中規定了緩存的ActsAsTaggable代碼需要後列的信息是復位再次運行。否則,不創建高速緩存方法(見https://github.com/mbleigh/acts-as-taggable-on/blob/v2.0.6/lib/acts_as_taggable_on/acts_as_taggable_on/cache.rb

  2. 您所呼叫的方法,save_cached_tag_list,不會自動保存記錄,因爲它是安裝爲before_save鉤,它不想要創建一個無限循環。所以你必須打電話保存。

所以,儘量用下面的更換您的遷移,它應該工作:

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 

應該這樣做。

+0

不需要'p.save_cached_tag_list',因爲它將被before_save鉤子調用。 – 2012-10-31 16:03:58

+0

@MichaelHale是的,我相信你從查看代碼是正確的。我將編輯我的答案 – 2012-11-02 01:17:26

+1

仍然可以在rails 4中完美工作。 – ahnbizcad 2014-10-23 15:14:50

相關問題