Alguém pode fornecer um guia testado sobre como renomear tags no console do rails? Não tenho experiência em usar o console do rails e não quero bagunçar o banco de dados…
Existe também uma maneira de alterar uma tag específica em todos os tópicos? Renomeei meu domínio uma vez, houve um método para reescrever todas as referências do domínio antigo para o novo. Isso também pode ser feito com tags? Quero renomear uma tag, mas não confundir os usuários com tags inexistentes.
Editar, resolvi com sinônimos de tag Embora esteja longe do ideal, pois continuará o uso de tags antigas e será exibido em minha visão geral de tags e autocompletar. Eu realmente gostaria de substituí-la totalmente e tornar a antiga obsoleta.
Bem, por exemplo, quando uso a tag chat aqui e muitas outras em tópicos diferentes, e então você a renomeia para #chats. Então a tag #chat apontará para uma tag inexistente porque ela não foi renomeada. Portanto, a renomeação funciona bem para títulos de tópicos, mas não para comentários dentro do tópico quando as pessoas já os usaram. Ou estou perdendo alguma coisa?
Acho que não há como renomear tags existentes usadas em tópicos pelos usuários? Então, não as tags nos títulos dos tópicos, mas realmente nos comentários.
Parece legal! Obrigado pelo aviso. Backups mitigarão o risco .
Para meu entendimento, \"raw like '%#foo%'\", isso é uma correspondência exata? No sentido de, e se você tiver a tag #access que precisa ser renomeada para #access_granted, \"raw like '%#access%'\" corresponderia tanto a #access quanto a #access_granted? Porque nesse caso, comentários existentes que já usam #access_granted poderiam talvez ser renomeados para #accessaccess_granted.
Para comparar com o comando grep, a opção --word-regexp ajuda e garante que você corresponda apenas a palavras inteiras.
Da página do manual:
Seleciona apenas as linhas que contêm correspondências que formam palavras inteiras. O teste é que a subcadeia correspondente deve estar no início da linha ou precedida por um caractere não constituinte de palavra. Da mesma forma, deve estar no final da linha ou seguida por um caractere não constituinte de palavra. Caracteres constituintes de palavra são letras, dígitos e o underscore.
Este comando funciona de forma semelhante? Claro, posso descobrir fazendo o backup e executando o comando. Mas apenas para entender os riscos, se você souber disso, é claro. Caso contrário, YOLO.
O \"raw like '%#foo%'\" de fato não é uma correspondência exata, mas não precisa ser. Como uma consulta LIKE % é muito custosa em termos de desempenho, optei por não piorá-la ainda mais exigindo um caractere não alfanumérico após ela. A consulta where serve apenas para pré-selecionar - você poderia, na verdade, fazer Post.all.each e funcionaria também (embora muito mais lentamente).
A substituição real está sendo feita pelo gsub e o \\b garante que haja um limite de palavra após a tag, ou seja, a tag termina ali.
Portanto, qualquer postagem contendo #access_granted corresponderia, e o código interno seria executado, mas o gsub não faria nada nesse 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
Mas recebo um erro bash: syntax error near unexpected token "raw like ‘%#access%’"'ebash: syntax error near unexpected token \"raw like '%#feedback%'\"', antes que eu comece a adivinhar, o # precisa ser escapado?