如何在Rails中使用acts_as_taggable_on声明标签别名?

时间:2011-08-11 21:13:08

标签: ruby-on-rails ruby tags acts-as-taggable-on

acts_as_taggable_on实现工作得很好,但我还需要声明标记别名。

我发现了一个声称这样做的插件,acts_as_taggable_with_aliases,但最后一次提交是在2009年而不是在宝石存储库中,所以我认为该项目现在已经死了。

有什么方法可以实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

也许你可以创建自己的模型来支持这个(以及你想要的任何其他东西)......

我认为你可以通过以下方式实现这一目标:

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

通过这种方式,您可以为您的代码添加任何行为和数据。

希望它可以帮到你!

答案 1 :(得分:0)

您可以查看acts_as_taggable_with_aliases的代码。一切都在里面。你可以看看它是否总是与acts_as_taggable兼容并检查你是否可以尝试维护它。