¿Alguien puede proporcionar una guía probada sobre cómo renombrar etiquetas en la consola de rails? No tengo experiencia usando la consola de rails y no quiero estropear la base de datos…
¿Hay también una forma de cambiar una etiqueta específica en todos los temas? Una vez renombré mi dominio, hubo un método para reescribir todas las referencias del dominio antiguo al nuevo. ¿Se puede hacer lo mismo con las etiquetas? Quiero renombrar una etiqueta, pero no confundir a los usuarios con etiquetas inexistentes.
Editar, lo resolví con sinónimos de etiquetas Aunque está lejos de ser ideal, ya que continuará el uso de etiquetas antiguas y se mostrará en mi resumen de etiquetas y autocompletado. Realmente me gustaría reemplazarla por completo y dejar obsoleta la antigua.
Bueno, por ejemplo, cuando uso la etiqueta chat aquí y muchas otras en diferentes temas, y luego la renombra a #chats. Entonces la etiqueta #chat apuntará a una etiqueta inexistente porque no se renombra. Así que el cambio de nombre funciona bien para los títulos de los temas, pero no para los comentarios dentro del tema cuando la gente ya los ha utilizado. ¿O me estoy perdiendo algo?
Supongo que no hay forma de renombrar las etiquetas existentes utilizadas en los temas por los usuarios? Entonces, no las etiquetas en los títulos de los temas, sino realmente en los comentarios.
¡Se ve genial! Gracias por el aviso. Las copias de seguridad mitigan el riesgo .
Para mi entendimiento, \"raw like '%#foo%'\", ¿es una coincidencia estricta? En el sentido de que, ¿qué pasa si tienes la etiqueta #access que necesita ser renombrada a #access_granted, coincidiría \"raw like '%#access%'\" tanto con #access como con #access_granted? Porque en ese caso, los comentarios existentes que ya usan #access_granted podrían quizás ser renombrados a #accessaccess_granted.
Para compararlo con el comando grep, el modificador --word-regexp ayuda y se asegura de que solo coincidan palabras completas.
De la página del manual:
Selecciona solo las líneas que contengan coincidencias que formen palabras completas. La prueba es que la subcadena coincidente debe estar al principio de la línea o precedida por un carácter no constitutivo de palabra. De manera similar, debe estar al final de la línea o seguida por un carácter no constitutivo de palabra. Los caracteres constituyentes de palabra son letras, dígitos y el guion bajo.
¿Funciona este comando de manera similar? Por supuesto, puedo averiguarlo haciendo la copia de seguridad y ejecutando el comando. Pero solo para entender los riesgos, si sabes esto, por supuesto. De lo contrario, YOLO.
La cadena \"raw like '%#foo%'\" en realidad no es una coincidencia estricta, pero no es necesario que lo sea. Dado que una consulta LIKE con % es muy costosa en términos de rendimiento, elegí no empeorarla exigiendo un carácter que no sea de palabra después de ella. La consulta where está ahí solo para preseleccionar; de hecho, podrías usar Post.all.each y funcionaría igual (aunque mucho más lento).
El reemplazo real lo realiza gsub y \\b asegura que haya un límite de palabra después de la etiqueta, es decir, la etiqueta termina ahí.
Por lo tanto, cualquier publicación que contenga #access_granted coincidiría, y el código interno se ejecutaría, pero gsub no haría nada en ese caso.
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
Pero obtengo un error bash: syntax error near unexpected token "raw like ‘%#access%’"'ybash: syntax error near unexpected token \"raw like '%#feedback%'\"', antes de empezar a adivinar, ¿necesita escaparse el #?