Ersetze einen String in allen Beiträgen

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
# füge das Zeug ein

Du könntest vorher ein Backup machen.

2 „Gefällt mir“

Danke Jay, ich schätze deine Zeit!

Und ich habe auf die harte Tour gelernt, ein Backup zu machen, bevor ich etwas Ernstes tue :slight_smile:

Update: Es hat super funktioniert, aber ich musste \n anstelle von / verwenden.

Außerdem sind es Topic und Post im obigen Code :slight_smile:

Es ist eine gute Idee, nach der Ausführung auch einen Rebake durchzuführen. In meinem Fall war es, um Thumbnails neu zu generieren.

2 „Gefällt mir“

Ein Beitrag wurde in ein bestehendes Thema eingefügt: Inhalt in mehreren Themen mit Regex ersetzen?

Hallo @nathank! Neugierig, ob Sie eine Upstream-Lösung dafür gefunden haben. Wir befassen uns mit einem ähnlichen Problem, bei dem wir „X“ im Wesentlichen jedes Mal durch „Y“ ersetzen möchten, wenn ein Benutzer „X“ in sein Thema oder seinen Beitrag aufnimmt.

Das ist, was die Funktion „Überwachte Wörter“ tut. Sie ersetzt Zeichenfolgen, wenn der Beitrag erstellt oder bearbeitet wird.

/admin/customize/watched_words

1 „Gefällt mir“

Danke, Jay! Es sieht so aus, als würde das für zeichenbasierte Sequenzen funktionieren, aber nicht für nicht-zeichenbasierte Formatierungen wie Tab-Einzüge.

Anwendungsfälle: Wir haben einige ältere Autoren auf unserer Plattform, die eine Tastatur immer noch wie eine Schreibmaschine behandeln und 5 Mal die Leertaste drücken, um einen Einzug zu erzeugen. Andere Autoren kopieren und fügen mit einem Tab-Einzug ein. Beides hinterlässt uns, was Discourse als Markup interpretiert. (Wenn ich den Begriff richtig verwende.)

Wir haben eine Problemumgehung auf der Theme-Komponenten-Seite gefunden, bei der wir das CSS so angepasst haben, dass es die Markup-Formatierung überschreibt, was wir für unseren spezifischen Anwendungsfall nie benötigen.

Prost und danke für deine Hilfe!

2 „Gefällt mir“

Wenn ich \[JUSTIFY\] löschen möchte, ist das richtig?

rake ‘posts:delete_word\[\[JUSTIFY\]\]’

Ich habe den folgenden Befehl verwendet, um nicht konvertierte [HEADING]-Tags von XenForo zu ersetzen:

sudo -u discourse -H RAILS_ENV=production bundle exec rails runner '
Post.where("raw LIKE ?", "%[HEADING%").find_each(batch_size: 500) do |p|
  orig = p.raw
  cooked = orig.dup
  (1..6).each do |lvl|
    cooked.gsub!(/\[HEADING=#{lvl}\](.*?)\[\/HEADING\]/mi) { "#" * lvl + " " + $1 }
  end
  cooked.gsub!(/\[HEADING\](.*?)\[\/HEADING\]/mi) { "## " + $1 }
  next if cooked == orig
  p.raw = cooked
  p.save!(validate: false)   # Löst Re-Bake aus, überspringt aber die Validierung
end
puts "HEADING tags converted & rebaked."
'
2 „Gefällt mir“