لا يمكن حذف الموضوع بدون فئة

لدي موضوع في قاعدة البيانات لدينا مع category_id لفئة قام شخص ما بحذفها. يمكنني فتح هذا الموضوع مباشرة باستخدام معرفه:
url: …/t/3

في جدول topics، المعرف id = 3 لديه فئة category = 4. ولكن هذه الفئة محذوفة وليست موجودة في جدول categories. تمكنت من حذف العديد من هذه الموضوعات المفقودة. لكن هذا الموضوع لا يعمل، لأن الخاصيتين closed و archived قيمتهما true.

إذا اخترت في القائمة المنبثقة “حذف بشكل دائم” لهذا الموضوع، أتلقى رسالة خطأ:
“حدث خطأ: يحتوي هذا الموضوع على مشاركات غير محذوفة. يرجى حذفها نهائيًا قبل حذف الموضوع نهائيًا.”

هل لديك أي فكرة عن كيفية إدراج فئة وهمية بالمعرف 4 في قاعدة البيانات أو حذف هذا الموضوع المفقود؟

[اقتباس=“steinjer، المنشور: 1، الموضوع: 367811”]
في مواضيع الجدول، المعرّف = 3 لديه الفئة = 4.
[/اقتباس]

أعتقد أن هذا هو موضوع “حول” للفئة #عام؟ عادةً ما تكون مواضيع “حول” غير قابلة للحذف في واجهة المستخدم.

هل هناك سبب يجعلك ترغب في حذف هذا الموضوع بالكامل؟

إعجاب واحد (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)

إذا تم حذف فئة General الخاصة بك بأمان من خلال واجهة المستخدم، فمن المتوقع أن يتم حذف موضوع “حول” بشكل غير دائم كما تراه. لا ينبغي أن يسبب أي مشاكل. :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

وفي مستكشف البيانات أحصل على:

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

هممم. اعتقدت أن معرف الفئة لموضوعك المعطل هو 4.

كان هذا أفضل تخمين لدي. إذا كانت لديك ميزانية، فقد تطلب المساعدة في Marketplace. أعتقد أنك ستحتاج إلى شخص ما للدخول إلى rails لمعرفة ما إذا كان بإمكانه حل المشكلة.

إعجاب واحد (1)

Marketplace هو خيار دائمًا، خاصة إذا كان الأمر عاجلاً. :heart:

على الرغم من أن المزيد من التفاصيل هنا قد يساعد في إثارة استجابة مجتمعية. :crossed_fingers:
يبدو أن كلاكما واثق من أن السبب الجذري هو هذا الموضوع. إذا كان مستكشف البيانات يمكنه العثور عليه، فيجب أن تكون قادرًا على العثور عليه في وحدة تحكم rails. إذا كان بإمكانك العثور عليه، فيجب أن تكون قادرًا على استخدام 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.where(id: 3)
=> []

[اقتباس=“JammyDodger, المشاركة:8، الموضوع:367811”]
إذا كان بإمكانك العثور عليه، فيجب أن تكون قادرًا على استخدام post_destroyer عليه وحذفه من هناك؟
[/اقتباس]

كما ترون، الإيجاد ممكن. ولكن ليس لدي أي فكرة عن بناء جملة 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.