Substituir uma string em todas as postagens

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
# cole o código aqui

Talvez faça um backup primeiro.

2 curtidas

Obrigado Jay, aprecio seu tempo!

E aprendi da maneira mais difícil a fazer um backup antes de fazer qualquer coisa séria :slight_smile:

atualização: Funcionou muito bem, mas tive que usar \n em vez de /.

Além disso, é Tópico e Postagem no código acima :slight_smile:

Boa ideia fazer um rebake depois de executar isso também. No meu caso, foi para regenerar miniaturas.

2 curtidas

Uma postagem foi mesclada em um tópico existente: Substituindo conteúdo em vários tópicos com Regex?

Olá @nathank! Gostaria de saber se você encontrou uma solução upstream para isso. Estamos analisando um problema semelhante onde gostaríamos de (essencialmente) substituir automaticamente “X” por “Y” toda vez que um usuário incluir “X” em seu tópico ou postagem.

É isso que o recurso de palavras monitoradas faz. Ele substituirá strings quando a postagem for criada ou editada.

/admin/customize/watched_words

1 curtida

Obrigado, Jay! Parece que isso funcionará para sequências baseadas em caracteres, mas não para formatação não baseada em caracteres, como recuos de tabulação.

Casos de uso: temos alguns escritores mais antigos em nossa plataforma que ainda tratam um teclado como uma máquina de escrever e pressionam a barra de espaço 5 vezes para um recuo. Outros escritores estão copiando e colando com um recuo de tabulação. Ambos nos deixam com o que o Discourse interpreta como marcação. (Se estou usando o termo corretamente.)

Encontrei uma solução alternativa no lado do componente de tema, onde obtivemos o CSS para essencialmente substituir a formatação da marcação, o que nunca precisamos para nosso caso de uso específico.

Saudações e obrigado pela sua ajuda!

2 curtidas