Replace a string in all posts

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
# ここに貼り付けます

最初にバックアップを作成することをお勧めします。

「いいね!」 2

ジェイさん、お時間をいただきありがとうございます!

そして、何か重要なことをする前にバックアップを取るように、苦い経験から学びました :slight_smile:

追記:うまくいきましたが、/ の代わりに \n を使用する必要がありました。

また、上記のコードでは Topic と Post です :slight_smile:

これを実行した後にリベイクを行うのも良い考えです。私の場合は、サムネイルを再生成するためでした。

「いいね!」 2

投稿が既存のトピックにマージされました: 正規表現を使用して複数のトピックのコンテンツを置き換えますか?

@nathank さん、こんにちは!これに対するアップストリームの解決策は見つかりましたか?同様の問題に取り組んでおり、ユーザーがトピックや投稿に「X」を含めるたびに、それを「Y」に自動的に置き換えたいと考えています。

それがウォッチワード機能の役割です。投稿が作成または編集されたときに文字列を置き換えます。

/admin/customize/watched_words

「いいね!」 1

ジェイさん、ありがとうございます!これは文字ベースのシーケンスには機能するようですが、タブインデントのような文字以外のフォーマットには機能しないようです。

ユースケース:プラットフォームには、キーボードをタイプライターのように扱い、インデントのためにスペースバーを5回押す古いライターがいます。他のライターは、タブインデントでコピー&ペーストしています。どちらの場合も、ディスコースがマークアップとして解釈するものになってしまいます。(私の用語が正しければ。)

テーマコンポーネント側で、CSSがマークアップフォーマットをオーバーライドするようにする回避策を見つけました。これは、特定のユースケースでは決して必要ありません。

ご協力いただきありがとうございました!

「いいね!」 2

[JUSTIFY]を削除したいのですが、これで合っていますか?

rake ‘posts:delete_word[[JUSTIFY]]

xenforo から移行した際に変換されなかった [HEADING] を置換するために、以下のコマンドを使用しました。

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)   # rebake をトリガーするが、検証はスキップ
end
puts "HEADING タグが変換され、rebake されました。"
'
「いいね!」 2