カテゴリーなしでトピックを削除できません

データベースに、誰かが削除したカテゴリーIDを持つトピックがあります。このトピックはIDで直接開くことができます。
url: …/t/3

table topicsでは、id = 3のカテゴリーは4です。しかし、このカテゴリーは削除されており、table categoriesにはありません。多くのこのような失われたトピックは削除できましたが、このトピックは属性closedとarchivedがtrueであるため、削除できません。

ポップアップメニューで「完全に削除」を選択すると、次のエラーメッセージが表示されます。
「エラーが発生しました: このトピックには未削除の投稿があります。トピックを完全に削除する前に、それらを完全に削除してください。」

id 4のダミーカテゴリーをデータベースに挿入するか、この失われたトピックを削除する方法について何かアイデアはありますか?

それは General カテゴリの About トピックだと思いますか? 通常、About トピックは UI で削除できないはずです。

このトピックを完全に削除したい理由があるのですか?

「いいね!」 1

このカテゴリーがあまり利用できないのが原因ですが、より重要なのは、サイドバーのすべてのカテゴリーへのリンクが機能しなくなったことです。
…/categoriesを開こうとすると、「エラーが発生しました」というエラーメッセージが表示され、ブラウザのコンソールには次のエラーメッセージが表示されます:

Uncaught TypeError: i is null
    reason binary.js:7
    l item.js:166
    get topic.js:1017
    ee upload.js:65
    get topic.js:1017
    get topic.js:1017
    eM topic.js:1017
    s backup-codes.js:33
    n backup-codes.js:33
    Z upload.js:65
    T backup-codes.js:33
    evaluate backup-codes.js:33
    _execute backup-codes.js:33
    execute backup-codes.js:33
    rerender backup-codes.js:33
    render theme-setting.js:6
    _renderRoots theme-setting.js:6
    tA backup-codes.js:33
    _renderRoots theme-setting.js:6
    _renderRootsTransaction theme-setting.js:6
    _revalidate theme-setting.js:6
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _run client-error-handler.js:88
    run client-error-handler.js:88
    d bookmark.js:114
    Ember 2
    _join client-error-handler.js:88
    join client-error-handler.js:88
    p bookmark.js:114
    h bookmark.js:114
    $ topic.js:1017
    trigger composer-action-title.js:62
    transitionStarted add-translation.js:27
    loading ace-editor.js:176
    D upload.js:65
    triggerEvent upload.js:65
    trigger form-template-validation.js:54
    _handleSlowTransition upload.js:65
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _runExpiredTimers client-error-handler.js:88
    setTimeout handler*setTimeout client-error-handler.js:88
    _installTimerTimeout client-error-handler.js:88
    _later client-error-handler.js:88
    later client-error-handler.js:88
    T bookmark.js:114
    _triggerAction form-template-validation.js:54
    click form-template-validation.js:54
binary.js:7
Uncaught TypeError: i is null
    reason binary.js:7
    l item.js:166
    get topic.js:1017
    ee upload.js:65
    get topic.js:1017
    get topic.js:1017
    eM topic.js:1017
    s backup-codes.js:33
    n backup-codes.js:33
    Z upload.js:65
    T backup-codes.js:33
    evaluate backup-codes.js:33
    _execute backup-codes.js:33
    execute backup-codes.js:33
    rerender backup-codes.js:33
    render theme-setting.js:6
    _renderRoots theme-setting.js:6
    tA backup-codes.js:33
    _renderRoots theme-setting.js:6
    _renderRootsTransaction theme-setting.js:6
    _revalidate theme-setting.js:6
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _run client-error-handler.js:88
    run client-error-handler.js:88
    d bookmark.js:114
    success base.js:71
    l loader.js:1286
    fireWith loader.js:1286
    jQuery 4
    a base.js:71
    e named-references.js:49
    e named-references.js:49
    A base.js:71
    _findCategoriesAndTopics item.js:166
    k named-references.js:49
    w named-references.js:49
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _runExpiredTimers client-error-handler.js:88
    setTimeout handler*setTimeout client-error-handler.js:88
    _installTimerTimeout client-error-handler.js:88
    _later client-error-handler.js:88
    later client-error-handler.js:88
    T bookmark.js:114
    _triggerAction form-template-validation.js:54
    click form-template-validation.js:54

TypeError: t.category_list.categories は未定義です
s form-template-validation.js:54
categoriesFrom form-template-validation.js:54
_findCategoriesAndTopics item.js:166
k named-references.js:49
w named-references.js:49
invoke client-error-handler.js:88
flush client-error-handler.js:88
flush client-error-handler.js:88
_end client-error-handler.js:88
end client-error-handler.js:88
_run client-error-handler.js:88
run client-error-handler.js:88
d bookmark.js:114
success base.js:71
l loader.js:1286
fireWith loader.js:1286
jQuery 4
a base.js:71
e named-references.js:49
e named-references.js:49
A base.js:71
_findCategoriesAndTopics item.js:166
k named-references.js:49
w named-references.js:49
invoke client-error-handler.js:88
flush client-error-handler.js:88
flush client-error-handler.js:88
_end client-error-handler.js:88
end client-error-handler.js:88
_runExpiredTimers client-error-handler.js:88
setTimeout handler*setTimeout client-error-handler.js:88
_installTimerTimeout client-error-handler.js:88
_later client-error-handler.js:88
later client-error-handler.js:88

「いいね!」 2

どうやら誰かがトピックが入っているカテゴリーを削除してしまったようですね?そんなことがあってはならないはずです。以下のようなことをする必要があると思います。

rails c
c=Category.last; # (あるいは何らかの方法でカテゴリーを取得する)
Topic.where(category_id: 4).update_all(category_id: c.id)

UIから#generalカテゴリが正常に削除された場合、表示されているようにAboutトピックがソフト削除されるのは想定内です。問題は発生しないはずです。:thinking:

他に原因があるかもしれません。/logsページにエラーに関する詳細が表示されていますか?

「いいね!」 1

これは機能しないようです:

discourse(prod)> Topic.where(category_id: 4).update_all(category_id: 20)
=> 0
discourse(prod)> Topic.where(id: 3).update_all(category_id: 20)
=> 0

そして、Data Explorerでは次のようになります:

Select id, closed, archived, title,category_id
from topics
where id = '3'

result:
id 	closed 	archived 	title 	category
3 	true 	true 	Über die Kategorie Team 	4

うーん。あなたの壊れたトピックの category_id は 4 だと思っていました。

それが私の最善の推測でした。予算がある場合は、Marketplace で助けを求めることができます。誰かが rails に入って、それを解明できるかどうかを確認する必要があると思います。

「いいね!」 1

Marketplace は、特に緊急の場合は常に選択肢となります。:heart:

ただし、ここで詳細をもう少し追加すると、コミュニティからの応答を促すのに役立つかもしれません。:crossed_fingers:

お二方とも、根本原因がこのトピックであると確信しているようです。データエクスプローラーで見つけられるのであれば、レイルズコンソールでも見つけられるはずです。見つけられたら、post_destroyer を使用してそこから削除できるのではないでしょうか?

(ただし、問題の箇所をまだ完全に把握できていないため、推奨することには少し躊躇しています)

「いいね!」 3

はい、rubyコンソールではトピックを確認できます:

result = ActiveRecord::Base.lease_connection.exec_query('SELECT id, category_id FROM topics WHERE id = 3')
result.rows
=> [[3, 4]]

しかし、Topicには何もありません

Topic.where(id: 3)
=> []

ご覧のとおり、見つけることは可能です。しかし、そのテーブルエントリを正確に削除するためのRuby構文が全くわかりません。

うーん。:thinking: 一方では見つけられても、もう一方では見つけられないというのは珍しいですね。

railsコンソールは少々扱いにくいナイフのようなものですから、事故や連鎖的な影響を最小限に抑えるために、何が起こったのか正確に突き止めるのが最善でしょう。

そもそも、このカテゴリはどのように削除されたのでしょうか?

(万が一、この迷子のトピックが原因ではない場合に備えて、セーフモードの確認方法や、YourSite/logsページでエラーに関する追加情報がないか確認する方法の基本も併せてご紹介します)

ただし、あなたのデータがカテゴリ削除のキャッチオールが役立つような状態にあるかは分かりません。Bulk delete all topics in a category

良い質問ですね。これは数年前に別の管理者によって行われました。

一方、私はrailsコンソールで直接このトピックを削除しました。

result = ActiveRecord::Base.lease_connection.exec_delete('DELETE FROM topics WHERE id = 3')

その後、トピックは削除されました :grinning_face:

「いいね!」 1

そして、それがサイドバーの不格好なカテゴリリンクも解決したのですか?

数年間問題なく削除されていたのに、今になって問題が発生しているのは興味深いですね。

関連性を見つけたら教えてください。 :slight_smile:

「いいね!」 1

残念ながら、これはカテゴリリンクのエラーを修正するものではありません。しかし、削除できない投稿の問題は今のところ解決しました。カテゴリの問題もログに記録されていません。この問題には数日中に取り組みます。

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.