Quelqu’un peut-il fournir un guide testé sur la façon de renommer les tags dans la console rails ? Je n’ai aucune expérience de l’utilisation de la console rails et je ne veux pas endommager la base de données…
Existe-t-il également un moyen de changer une balise spécifique dans tous les sujets ? J’ai renommé mon domaine une fois, il y avait une méthode pour réécrire toutes les références de l’ancien domaine vers le nouveau. Cela peut-il également être fait avec des balises ? Je veux renommer une balise, mais ne pas confondre les utilisateurs avec des balises inexistantes.
Modification, j’ai résolu le problème avec les synonymes de balises Bien que ce ne soit pas idéal, car cela continuera à utiliser les anciennes balises et cela est montré dans mon aperçu des balises et la saisie semi-automatique. Je voudrais vraiment le remplacer entièrement et rendre l’ancien obsolète.
Eh bien, par exemple, lorsque j’utilise la balise chat ici et bien d’autres dans différents sujets, puis que vous la renommez en #chats. Alors la balise chat pointera vers une balise inexistante car elle n’est pas renommée. Donc, le renommage fonctionne bien pour les titres de sujets, mais pas pour les commentaires au sein des sujets où les gens les ont déjà utilisés. Ou est-ce que je manque quelque chose ?
J’imagine qu’il n’y a aucun moyen de renommer les tags existants utilisés dans les sujets par les utilisateurs ? Donc pas les tags dans les titres des sujets, mais vraiment dans les commentaires.
Ça a l’air cool ! Merci pour l’info. Les sauvegardes atténueront le risque .
Pour que je comprenne bien, \"raw like '%#foo%'\", est-ce une correspondance stricte ? Dans le sens où, si vous avez le tag #access qui doit être renommé en #access_granted, est-ce que \"raw like '%#access%'\" correspondrait à la fois à #access et #access_granted ? Parce que dans ce cas, les commentaires existants qui utilisent déjà #access_granted pourraient peut-être être renommés en #accessaccess_granted.
Pour comparer avec la commande grep, l’option --word-regexp aide et garantit que vous ne faites correspondre que des mots entiers.
D’après la page de manuel :
Sélectionne uniquement les lignes contenant des correspondances qui forment des mots entiers. Le test consiste en ce que la sous-chaîne correspondante doit être soit au début de la ligne, soit précédée d’un caractère non constitutif de mot. De même, elle doit être soit à la fin de la ligne, soit suivie d’un caractère non constitutif de mot. Les caractères constitutifs de mot sont les lettres, les chiffres et le tiret bas.
Cette commande fonctionne-t-elle de manière similaire ? Bien sûr, je peux le découvrir en faisant la sauvegarde et en exécutant la commande. Mais juste pour comprendre les risques, si vous le savez bien sûr. Sinon, YOLO.
La chaîne \"raw like '%#foo%'\" n’est effectivement pas une correspondance stricte, mais elle n’a pas besoin de l’être. Comme une requête LIKE % est très coûteuse en termes de performances, j’ai choisi de ne pas l’aggraver en exigeant un caractère non-mot après. La requête where est juste là pour présélectionner - vous pourriez en fait faire Post.all.each et cela fonctionnerait aussi (bien que beaucoup plus lentement).\n\nLe remplacement réel est effectué par le gsub et le \\b garantit qu’il y a une limite de mot après \nla balise, c’est-à-dire que la balise se termine là.\n\nDonc, tous les messages contenant #access_granted correspondraient, et le code interne s’exécuterait, mais le gsub ne ferait rien dans ce cas.\n\n\nirb(main):010:0\u003e \"Tag #access is here\".gsub(/#access\\b/, \"#access_granted\")\n=\u003e \"Tag #access_granted is here\"\nirb(main):011:0\u003e \"Tag #access_granted is here\".gsub(/#access\\b/, \"#access_granted\")\n=\u003e \"Tag #access_granted is here\"\n
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
Mais j’obtiens une erreur bash: syntax error near unexpected token "raw like ‘%#access%’"'etbash: syntax error near unexpected token \"raw like '%#feedback%'\"', avant que je commence à deviner, le # doit-il être échappé ?