Reemplazar una cadena en todas las publicaciones

Topics.where(category_id: 123).each do |t|
  posts.where(topic_id: t).each do |p|
    p.raw.gsub!("replaceme","/")
    p.save
  end
end
./launcher enter app
rails c
# pega el código

Quizás deberías hacer una copia de seguridad primero.

2 Me gusta

Gracias Jay, ¡aprecio tu tiempo!

Y he aprendido por las malas a hacer una copia de seguridad antes de hacer nada serio :slight_smile:

actualización: Funcionó de maravilla, pero tuve que usar \n en lugar de /.

Además, son Topic y Post en el código de arriba :slight_smile:

También es una buena idea hacer un rebake después de ejecutar esto. En mi caso, fue para regenerar miniaturas.

2 Me gusta

Se fusionó una publicación en un tema existente: ¿Reemplazar contenido en varios temas con Regex?

¡Hola @nathank! Me da curiosidad si encontraste una solución “upstream” para esto. Estamos analizando un problema similar donde nos gustaría (esencialmente) reemplazar automáticamente “X” con “Y” cada vez que un usuario incluya “X” en su tema o publicación.

Eso es lo que hace la función de palabras vigiladas. Reemplazará cadenas cuando se cree o edite la publicación.

/admin/customize/watched_words

1 me gusta

¡Gracias Jay! Parece que esto funcionará para secuencias basadas en caracteres, pero no para formatos no basados en caracteres, como las sangrías de tabulación.

Casos de uso: tenemos algunos redactores mayores en nuestra plataforma que todavía tratan un teclado como una máquina de escribir y presionan la barra espaciadora 5 veces para una sangría. Otros redactores copian y pegan con una sangría de tabulación. Ambos nos dejan con lo que Discourse interpreta como marcado. (Si estoy usando el término correctamente).

Encontré una solución alternativa en el lado del componente temático donde obtuvimos el CSS para anular esencialmente el formato de marcado, lo cual nunca necesitamos para nuestro caso de uso específico.

¡Saludos y gracias por tu ayuda!

2 Me gusta