actions_as_taggable_on实现效果很好,但是我还需要声明标签别名。

我找到了一个声称可以做到这一点的插件acts_as_taggable_with_aliases,但是最后一次提交是在2009年,并且不在gem仓库中,因此我认为该项目现在已经失效。

有什么办法可以做到这一点?

最佳答案

也许您可以创建自己的模型来支持此功能(以及您想要的任何其他功能)...

我认为您可以通过执行以下操作来实现:

class Tag < ActiveRecord::Base
end

class Tagging < ActiveRecord::Base
    validates_presence_of :tag_id
    belongs_to :tag
    belongs_to :taggable, :polymorphic => true
end

class ModelIWantToBeTagged < ActiveRecord::Base
  include ModelTagging
  has_many :taggings, :as => :taggable
end

module ModelTagging
    def add_tag(tag_name)
        tag = Tag.find_or_create_by_tag(tag_name)
        tagging = Tagging.new
        tagging.taggable_id = self.id
        tagging.taggable_type = get_class_name
        tagging.tag_id = tag.id
        tagging.save!
    end

    def remove_tag(tag_name)
        tag = Tag.find_by_tag(tag_name)
        Tagging.where(:tag_id => tag).delete_all
    end

    private
    def get_class_name
        self.class.name
    end
end

这样,您可以将任何行为和数据添加到标签中。

希望对您有帮助!

07-24 04:53