# PostRevisor kann Beiträge in gelöschten Themen nicht überarbeiten

**URL:** <https://meta.discourse.org/t/postrevisor-cant-revise-posts-in-deleted-topics/347130>\
**Category:** Bug\
**Created:** [14. Januar 2025 um 20:36 UTC](https://meta.discourse.org/t/postrevisor-cant-revise-posts-in-deleted-topics/347130 "2025-01-14T20:36:53Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [14. Januar 2025 um 20:36 UTC](https://meta.discourse.org/t/postrevisor-cant-revise-posts-in-deleted-topics/347130/1 "2025-01-14T20:36:53Z")

</div>

### tl;dr

Beim Aufruf von `PostRevisor` für einige Beiträge wird `post_id` auf `nil` gesetzt. Bin ich verrückt?

Antwort: Nein. `PostRevisor` greift auf `post.topic` zu, was für einen Beitrag in einem gelöschten Thema `nil` ist. Und dann setzt es `post.topic` auf nil, was wiederum post.topic\_id auf nil setzt.

Ich denke, PostRevisor sollte das Thema so abrufen:

```plaintext
  @topic = topic || Topic.with_deleted.find_by(id: post_topic_id)

```

anstatt so:

```plaintext
  @topic = topic

```

```plaintext
post=Post.find_by(topic_id: 179227, post_number: 12)
post.topic_id => 179227
pr=PostRevisor.new(post)
post.topic_id => nil

```

### Die ganze Geschichte

Ich arbeite an einem Skript, das `goo.gl`-Links repariert (der Dienst wird bald eingestellt, daher findet das Skript `goo.gl`-Links, ruft ab, wohin sie weitergeleitet werden, und ersetzt die `goo.gl`-URL durch diejenige, zu der sie weitergeleitet werden. Es funktioniert größtenteils.

### Aber

Bei einigen Beiträgen scheint alles gut zu laufen, aber dann schlägt `PostRevisor` fehl, weil `post.acting_user` nil ist. Und dann, in meiner Ausnahmebehandlung, scheint es, dass `topic_id` nil ist, aber es ist nicht der `post`, der nil ist, da er immer noch eine `post_number` hat.

```ruby
      begin
        puts "Revising (#{count}/#{total_posts}) https://mysite.com/t/#{post.topic_id}/#{post.post_number}"
        puts "missing topic_id for post #{post.id}" if !post.topic_id
        next if !post.topic_id
        PostRevisor.new(post).revise!(system_user, raw: new_raw, **revision_options)
      rescue => e
        puts "cannot revise (number: #{count} https://tw.forumosa.com/t/#{post.topic_id}/#{post.post_number}): #{e}"
      end

```

```plaintext
FIXING!!: https://goo.gl/maps/XaNG
B7qaZGzhBmM78 -----> https://www.google.com/maps/place/%E6%AD%A5%E9%81%93%E5%92%96%E5%95%A1%E9%A4%A8Cafe+Strada/@22.6300414,120.3153591,17z/data=!3m1!4b1!4m5!3m4!1s0x346e04944a9b3471:0x520c1f01c3d62e57!8m2!3d22.6301115!4d120.3175543?shorturl=1
Revising (680/1773) https://mysite.com/t/207069/1817
cannot revise (number: 680 https://mysite.com/t//1817): undefined method `acting_user=' for nil

```

Bei den allermeisten Beiträgen funktioniert dies einwandfrei, aber bei einer Teilmenge davon schlägt es fehl. Und wenn ich den Code Zeile für Zeile von Hand ausführe, erhalte ich dasselbe Ergebnis. Es scheint jedoch, dass, wenn ich `pr=PostRevisor.new(post)` mache, ich sehe, dass der Beitrag im pr-Datensatz keine `topic_id` hat und dann, wenn ich den `post` inspiziere, hat er jetzt `topic_id` auf nil gesetzt.

---

_[View the full topic](https://meta.discourse.org/t/postrevisor-cant-revise-posts-in-deleted-topics/347130)._
