Как объявить псевдонимы тегов с act_as_taggable_on в Rails? - PullRequest
7 голосов
/ 12 августа 2011

Реализация act_as_taggable_on работала довольно хорошо, но мне также нужно объявить псевдонимы тегов.

Я нашел плагин, который утверждал, что это так, acts_as_taggable_with_aliases , но последний коммит был2009 и не в репозиториях драгоценных камней, поэтому я предполагаю, что проект уже мертв.

Есть ли способ достичь этого?

Ответы [ 2 ]

1 голос
/ 15 мая 2012

Может быть, вы можете создать свои собственные модели для поддержки этого (и всего, что вы хотите) ...

Я думаю, вы можете достичь этого, сделав что-то вроде:

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

Этокак вы можете использовать любое поведение и данные для своих тегов.

Надеюсь, это поможет вам!

0 голосов
/ 03 апреля 2012

Вы можете взглянуть на код acts_as_taggable_with_aliases. Все внутри. Вы можете посмотреть, совместимо ли оно с acts_as_taggable, и проверить, можете ли вы его сохранить.

...