我最近将一堆模型迁移到一个伞形模型,问题是所有旧模型的tag_list都迁移为一个长字符串,而不是带分隔符的标签。
例如:
Post.tag_list = "popcorn, salty, butter"
以以下方式转到新模型:
"popcorn salty butter"
我在rails中进行了此SQL迁移
execute("UPDATE tags SET name='popcorn, salty, butter' WHERE LOWER(name) LIKE 'movie popcorn' ESCAPE '!';")
这可行,但是我的rails应用程序正在用一个长字符串-> movie popcorn
替换标签为"popcorn, salty, butter"
的所有资源,而我只想popcorn, salty, butter
-请注意(我不希望使用双引号引起来,因为我的应用程序使用逗号作为分隔符来表示多个标签)
我想用三个标签代替所有带有标签movie popcorn
的资源:popcorn
,salty
和butter
-如何使用上面的代码?由于它的工作原理类似,但是添加了双引号,这使该应用无法用于标签搜索。
我正在使用行为作为可标记和导轨5.1.6。
答案 0 :(得分:1)
创建标签popcorn
,salty
和butter
(而不是重命名标签)必须分别作为tags
表的单个记录,然后更新资源。单跑者看起来像:
tags = %w[popcorn salty butter].map do |tag|
Tag.find_or_create_by(name: tag)
end
Post.joins(:tags).where("tags.name = 'movie popcorn'").each do |post|
post.tags = tags
end
迁移无济于事。
更新:如果使用acts_as_taggable_on
gem,则代码如下:
Post.tagged_with('movie popcorn').each do |post|
post.tag_list = "popcorn, salty, butter"
post.save
end