2012-03-21 62 views
0

如何自定義acts_as_taggable_on?如何自定義acts_as_taggable_on?

ive在我的數據庫中有tags,post_tags,posts(型號:Tag,PostTag,Post)。

我這樣做:gem'acts-as-taggable-on','〜> 2.2.2'in Gemfile。

當生成遷移時,我發現它已經生成了默認表(標籤,標籤,標籤)。

如何自定義默認選項以適應我的模型?

回答

2

所有標籤都存儲在 ActsAsTaggableOn ::標籤(:身份證,:名稱)模型,並通過 ActsAsTaggableOn ::加標籤獲得訪問(:身份證,:TAG_ID,:taggable_type,:taggable_id,:背景等)模型。

如果您希望切換爲可作爲標籤的行爲,而不會丟失之前添加的標籤,則應在創建行爲作爲標籤後在默認表上創建遷移或耙子任務。

像這樣:

# In your model 
acts_as_taggable_on :post_tags 

# Rake task 
require 'acts-as-taggable-on' 

task :move_tags => [:environment] do 
    @posts = Post.all 
    Post.transaction do 
    Tag.transaction do 
     @posts.each do |p| 
     if p.tags.any? 
      p.update_attributes post_tag_list: p.tags.map(&:name) 
      p.tags.map(&:destroy) 
     end 
     end 
    end 
    end 
end 

# Now, if all is ok, you can drop both old tags and join table and remove associasions from your Post model. 

我沒有測試這個片段,但我已經成功做過類似的事情。