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
# вставьте содержимое
Сначала лучше сделать резервную копию.
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
# вставьте содержимое
Сначала лучше сделать резервную копию.
Спасибо, Джей, ценю твое время!
И я на собственном горьком опыте усвоил, что нужно делать резервную копию перед тем, как приступить к серьёзным действиям ![]()
Обновление: Всё сработало отлично, но пришлось использовать \n вместо /.
Кроме того, в коде выше указаны Topic и Post ![]()
Хорошая идея — выполнить пересборку (rebake) после запуска этого скрипта. В моём случае это потребовалось для пересоздания миниатюр.
Пост был объединён с существующей темой: Замена содержимого в нескольких темах с помощью регулярных выражений?
Привет @nathank! Интересно, нашёл ли ты решение на стороне upstream для этой проблемы. Мы столкнулись с похожей ситуацией, где хотели бы (по сути) автоматически заменять «X» на «Y» каждый раз, когда пользователь упоминает «X» в своей теме или сообщении.
В этом и заключается функция отслеживаемых слов. Она будет заменять строки при создании или редактировании сообщения.
/admin/customize/watched_words
Спасибо, Джей! Похоже, это работает для последовательностей на основе символов, но не для форматирования без символов, такого как отступы с помощью табуляции.
Сценарии использования: у нас есть некоторые старые авторы на нашей платформе, которые до сих пор относятся к клавиатуре как к печатной машинке и нажимают пробел пять раз для отступа. Другие авторы копируют и вставляют текст с отступом через табуляцию. Оба этих случая приводят к тому, что Discourse интерпретирует это как разметку. (Если я правильно использую этот термин.)
Нашёл обходной путь на стороне компонента темы, где мы заставили CSS фактически переопределить форматирование разметки, которое нам никогда не нужно для нашего конкретного случая использования.
Всего наилучшего и спасибо за помощь!
Если я хочу удалить[JUSTIFY], правильно ли это?
rake ‘posts:delete_word[[JUSTIFY]]’
Я использовал следующую команду для замены тегов [HEADING], которые не были преобразованы при миграции с XenForo:
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 преобразованы и переобработаны."
'