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:

이 작업을 실행한 후에도 rebake를 해두는 것이 좋은 생각이야. 내 경우에는 섬네일을 재생성하기 위해서였어.

2개의 좋아요

게시물이 기존 주제에 병합되었습니다: 여러 주제에서 정규식으로 콘텐츠 교체?

안녕하세요 @nathank! 이 문제에 대한 업스트림 솔루션을 찾았는지 궁금합니다. 저희도 비슷한 문제를 겪고 있는데, 사용자가 토픽이나 게시글에 "X"를 포함할 때마다 "X"를 (본질적으로) 자동으로 "Y"로 교체하는 방법을 찾고 있습니다.

바로 감시 단어 기능이 하는 일입니다. 게시물이 생성되거나 수정될 때 문자열을 대체합니다.

/admin/customize/watched_words

1개의 좋아요

제이, 감사합니다! 문자 기반 시퀀스에는 효과가 있을 것 같지만, 탭 들여쓰기 같은 문자가 아닌 서식에는 작동하지 않는 것 같습니다.

사용 사례: 저희 플랫폼에는 타자기처럼 키보드를 다루는 구세대 작가들이 있습니다. 이들은 들여쓰기를 위해 스페이스바를 5번 누릅니다. 또 다른 작가들은 탭 들여쓰기를 사용하여 복사하고 붙여넣습니다. 이 두 가지 경우 모두 discourse가 마크업으로 해석하는 결과를 남깁니다. (제가 이 용어를 올바르게 사용하고 있다면 말이죠.)

해결책으로 테마 컴포넌트 측면에서 css를 사용하여 마크업 서식을 기본적으로 오버라이드하는 방법을 찾았습니다. 저희의 특정 사용 사례에서는 이러한 마크업 서식이 전혀 필요 없기 때문입니다.

감사합니다, 그리고 도움을 주셔서 감사합니다!

2개의 좋아요

만약 내가 delete[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 tags converted & rebaked."
'
2개의 좋아요