Rails 5 Postgres - 用一个标签替换所有资源到多个标签?

Rails 5 Postgres - replace all resource with one tag with multiple tags?

我最近将一堆模型迁移到一个伞形模型,问题是所有旧模型的 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 的资源:popcornsaltybutter - 我该怎么做那用上面的代码?由于功能类似,只是加了双引号,导致应用无法搜索标签。

我正在使用 acts as taggable 和 rails 5.1.6.

无需重命名标签,而是需要创建标签 popcornsaltybutter,每个标签作为 tags table 的单个记录,然后更新你的资源。单人跑步者可能看起来像:

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