我的例子:
class Category < ActiveRecord::Base
has_many :tags, :as => :tagable, :dependent => :destroy
def tag_string
str = ''
tags.each_with_index do |t, i|
str+= i > 0 ? ', ' : ''
str+= t.tag
end
str
end
def tag_string=(str)
tags.delete_all
Tag.parse_string(str).each { |t| tags.build(:tag => t.strip) }
end
end
您如何优化此tag_string字段?每次我想要更新它们时,我都不想删除所有标签。有没有更好的方法来解析字符串与标签? 我不想使用插件! THX。
答案 0 :(得分:2)
我知道您不想使用插件,但您可能希望深入了解acts_as_taggable_on_steroids的来源,了解他们是如何处理这些情况的。根据我的经验,使用该插件非常轻松。
答案 1 :(得分:1)
class Category < ActiveRecord::Base
has_many :tags, :as => :tagable, :dependent => :destroy
def tag_string
tags.map {|t| t.name }.join ', '
end
def tag_string=(str)
tags = Tag.parse_string(str)
end
end
我不知道Tag.parse_string(str)
方法做了什么。如果它返回Tag
个对象的数组,那么我的示例应该可以工作。而且我不确定这是否只会更新,或删除旧版本并添加新版本。您可以对其进行测试并查看日志中的实际内容。
答案 2 :(得分:1)
我同意其他评论者的意见。你最好在这里使用插件。这是一个解决方案。
class Category < ActiveRecord::Base
has_many :tags, :as => :tagable, :dependent => :destroy
def tag_string
tags.collect(&:name).join(", ")
end
def tag_string=(str)
# Next line will delete the old association and create
# new(based on the passed str).
# If the Category is new, then save it after the call.
tags = Tag.create(str.split(",").collect{ |name| {:name => name.strip} })
end
end