继续讨论 无法修复带有点/句点的标签名称:
您好,
有人能提供一份经过测试的指南,说明如何在 rails 控制台中重命名标签吗?我没有使用 rails 控制台的经验,也不想弄乱数据库……
SSH 进入你的服务器
cd /var/discourse
./launcher enter app
rails c
t = Tag.find_by_name('oldname')
t.name = 'newname'
t.save
是否也有办法更改所有主题中的特定标签?我曾经重命名过我的域名,有一种方法可以将所有对旧域名的引用重写为新域名。标签也可以这样做吗?我想重命名一个标签,但不想让用户对不存在的标签感到困惑。
编辑,我已经通过标签同义词解决了这个问题
虽然这远非理想,因为它将继续使用旧标签,并且会在我的标签概览和自动完成中显示。我真的很想完全替换它并淘汰旧的。
坦率地说——重命名标签为什么不够?
例如,当我在这里使用标签 chat 以及其他许多不同主题的标签时,然后您将其重命名为 #chats。那么 #chat 标签将指向一个不存在的标签,因为它没有被重命名。所以重命名对主题标题有效,但对人们已经使用过的、主题内的评论无效。或者我遗漏了什么?
特别感谢 @RGJ,一切顺利
![]()
我猜没有办法重命名用户在主题中使用的现有标签?不是主题标题中的标签,而是评论中的标签。
风险自负!
请在重命名 #foo 为 #bar 之后 执行此操作
Post.where("raw like '%#foo%'").each do |p|
p.raw = p.raw.gsub(/#foo\b/, '#bar')
p.save!
end
看起来很酷!感谢提醒。备份将降低风险
。
为了让我理解,\"raw like '%#foo%'\",这是严格匹配吗?也就是说,如果你有一个标签 #access 需要重命名为 #access_granted,那么 \"raw like '%#access%'\" 会同时匹配 #access 和 #access_granted 吗?因为在这种情况下,已经使用 #access_granted 的现有注释可能会被重命名为 #accessaccess_granted。
为了与 grep 命令进行比较,--word-regexp 开关可以帮助确保只匹配整个单词。
来自手册页:
仅选择包含整个单词匹配的行。测试是匹配的子字符串必须位于行的开头,或者前面是非单词构成字符。同样,它必须位于行的末尾或后面是非单词构成字符。单词构成字符是字母、数字和下划线。
这个命令是这样工作的吗?当然,我可以备份并运行命令来找出答案。但只是为了了解风险,如果你知道的话。如果不知道,那就 YOLO。
\"raw like '%#foo%'\" 的确不是严格匹配,但它不需要是。因为 LIKE % 查询在性能上非常昂贵,所以我选择不通过要求其后有一个非单词字符来使其变得更糟。where 查询只是为了预先选择——你实际上可以执行 Post.all.each,它也能工作(尽管速度慢得多)。
实际的替换是由 gsub 完成的,而 \b 确保标签后面有一个单词边界,即标签在那里结束。
因此,任何包含 #access_granted 的帖子都会匹配,并且内部代码会执行,但在这种情况下 gsub 不会执行任何操作。
irb(main):010:0> "Tag #access is here".gsub(/#access\b/, "#access_granted")
=> "Tag #access_granted is here"
irb(main):011:0> "Tag #access_granted is here".gsub(/#access\b/, "#access_granted")
=> "Tag #access_granted is here"
我想立即运行此代码:
Post.where("raw like '%#access%'").each do |p|
p.raw = p.raw.gsub(/#access\b/, '#strategic_access')
p.save!
end
Post.where("raw like '%#feedback%'").each do |p|
p.raw = p.raw.gsub(/#feedback\b/, '#digital_feedback')
p.save!
end
但我收到错误 bash: syntax error near unexpected token "raw like ‘%#access%’"'和bash: syntax error near unexpected token \"raw like '%#feedback%'\"',在我开始猜测之前,# 是否需要转义?
它应该在这个 之后 执行,代码应该在 rails c 中执行
哦,是的,我甚至都没注意到 bash 错误。我应该多睡会儿……谢谢!!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.