【问题标题】:How to declare tags aliases with acts_as_taggable_on in Rails?如何在 Rails 中使用acts_as_taggable_on 声明标签别名?
【发布时间】:2011-10-25 08:44:19
【问题描述】:
【问题讨论】:
标签:
ruby-on-rails
ruby
tags
acts-as-taggable-on
【解决方案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
这样您就可以将任何行为和数据添加到您的标签中。
希望对你有帮助!
【解决方案2】:
你可以看一下acts_as_taggable_with_aliases的代码。一切都在里面。您可以查看它是否始终与acts_as_taggable 兼容并检查是否可以尝试维护它。