Estoy intentando actualizar un conjunto de publicaciones en un script de Rails. Parece haber un comportamiento extraño de desviación de uno, donde una publicación se actualiza con el valor de la publicación anterior.
He movido todas estas actualizaciones para que hagan directamente un post.raw.gsub() para “resolver” este problema en las publicaciones dentro del bucle interno (que anteriormente obtenían el valor de la publicación del tema), pero ahora la publicación del tema del tema N se actualiza con el raw de la última publicación anterior del tema N-1.
Ahora estoy aún más confundido, ya que la primera publicación (es decir, la del tema) se actualiza con tpost.raw.gsub! con el valor de post.raw.gsub!(preg,"#{$2}") de la iteración anterior.
EDICIÓN: Bueno, nunca llegué a descubrir qué estaba mal con la última versión, pero aquí hay una versión de un script de actualización de algunas publicaciones que crea una revisión:
def fix_slack_posts
opts = { bypass_rate_limiter: true, bypass_bump: true, skip_validations: true }
reg=/(\\*\\*)(This topic was automatically generated from Slack. You can find the original thread \\[here\\].+?\\))(\\*\\*\\.)?\\s*?([a-zA-Z, ()]* : )(.*)/m
preg = /([a-zA-Z, ()]+? : )(.*)/m
topic_posts = Post.where("raw like '**This topic was automatically%'")
#topic_posts = Post.where(topic_id: [23934, 23935], post_number: 1)
topic_posts.each do |tpost|
begin
puts "Fixing topic post #{tpost.id} with #{tpost.raw[0..30]}"
puts tpost.raw.gsub(reg,"1 #{$1}\n2 #{$2}\n3 #{$3}\n4 #{$4}\n 5 #{$5}")
raw = tpost.raw.gsub(reg,"#{$5}\n\n#{$2}.")
puts "Fixing topic post #{tpost.id} with #{tpost.raw[0..30]}\n---\u003e#{raw}"
user = User.find(tpost.user_id)
if raw.length \u003e 10
tpost.revise(user,{raw: raw,edit_reason: 'fix slack link location'}, opts)
end
rescue
puts "Can't update topic post #{tpost.raw}"
end
posts = Post.where(topic_id: tpost.topic_id).where("post_number \u003e 1")
posts.each do |post|
if post.raw.gsub(preg,"#{$2}").length\u003e=10
begin
puts "Fixing post #{post.id} with #{post.raw[0..30]}"
raw = post.raw.gsub(preg,"#{$2}")
user = User.find(post.user_id)
post.revise(user,{raw: raw,edit_reason: 'remove user name from text'}, opts)
rescue
puts "#{post.id}--cannot save #{post.raw}. "
end
end
end
end
end