Qualcuno può fornire una guida testata su come rinominare i tag nella console di rails? Non ho esperienza nell’uso della console di rails e non voglio incasinare il database…
C’è anche un modo per cambiare un tag specifico in tutti gli argomenti? Ho rinominato il mio dominio una volta, c’era un metodo per riscrivere tutti i riferimenti al vecchio dominio a quello nuovo. Si può fare anche con i tag? Voglio rinominare un tag, ma non confondere gli utenti con tag inesistenti.
Modifica, ho risolto con i sinonimi di tag Sebbene sia lungi dall’essere l’ideale, poiché continuerà l’uso dei vecchi tag e verrà mostrato nella mia panoramica dei tag e nell’autocompletamento. Vorrei davvero sostituirlo completamente e rendere obsoleto quello vecchio.
Ad esempio, quando uso il tag chat qui e molti altri in argomenti diversi, e poi lo rinomini in #chats. Allora il tag #chat punterà a un tag non esistente perché non è stato rinominato. Quindi la rinomina funziona bene per i titoli degli argomenti, ma non per i commenti all’interno degli argomenti quando le persone li hanno già usati. O mi sfugge qualcosa?
Non c’è modo di rinominare i tag esistenti utilizzati negli argomenti dagli utenti? Quindi non i tag nei titoli degli argomenti, ma davvero nei commenti.
Sembra fantastico! Grazie per l’avviso. I backup mitigheranno il rischio .
Per mia comprensione, \"raw like '%#foo%'\", si tratta di una corrispondenza esatta? Nel senso, cosa succede se hai il tag #access che deve essere rinominato in #access_granted, \"raw like '%#access%'\" corrisponderebbe sia a #access che a #access_granted? Perché in quel caso i commenti esistenti che usano già #access_granted potrebbero forse essere rinominati in #accessaccess_granted.
Per confrontarlo con il comando grep, l’opzione --word-regexp aiuta e assicura che vengano trovate solo parole intere.
Dalla pagina man:
Seleziona solo le righe che contengono corrispondenze che formano parole intere. Il test è che la sottostringa corrispondente deve trovarsi all’inizio della riga, o essere preceduta da un carattere non costituente di parola. Allo stesso modo, deve trovarsi alla fine della riga o essere seguita da un carattere non costituente di parola. I caratteri costituenti di parola sono lettere, cifre e il trattino basso.
Questo comando funziona in modo simile? Ovviamente posso scoprirlo facendo il backup ed eseguendo il comando. Ma solo per capire i rischi, se lo sai ovviamente. Altrimenti, YOLO.
La stringa \"raw like '%#foo%'\" non è in effetti una corrispondenza esatta, ma non è necessario che lo sia. Poiché una query LIKE % è molto costosa in termini di prestazioni, ho scelto di non peggiorarla ulteriormente richiedendo un carattere non di parola dopo di essa. La query where è solo lì per pre-selezionare: potresti effettivamente fare Post.all.each e funzionerebbe comunque (anche se molto più lentamente).
La sostituzione effettiva viene eseguita da gsub e \b garantisce che ci sia un confine di parola dopo il tag, cioè il tag termina lì.
Quindi, qualsiasi post contenente #access_granted corrisponderebbe e il codice interno verrebbe eseguito, ma gsub non farebbe nulla in quel 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
Ma ricevo un errore bash: syntax error near unexpected token "raw like ‘%#access%’"'ebash: syntax error near unexpected token \"raw like '%#feedback%'\"', prima di iniziare a indovinare, il # deve essere escapato?