لقد قمت بإنشاء إضافة تقوم بتحميل صورة إلى المواضيع وأقوم بحفظ مسار الملف في حقول مخصصة. ولكن Discourse يقوم بحذف جميع الصور التي تم تحميلها للمواضيع عن طريق اعتبارها صورًا يتيمة لأنها غير مرتبطة بالمواضيع. لذلك، هل يمكن لأي شخص إرشادي حول كيفية ربط الصور التي تم تحميلها بالمواضيع المعنية؟
لقد حاولت تحديث image_upload_id ولكن بطريقة ما لم يتم تحديث قيمة الأعمدة في جدول المواضيع.
عذرًا، كانت تلك مجرد رد جزئي، ولن تمنع الصور من أن تصبح يتيمة. يجب أن تكون قادرًا على تعيين topic.image_upload_id من الكود الخاص بك، ولكن سيتم الكتابة فوقه عند إعادة خبز HTML للمنشور. لذلك يجب عليك ربط كود إعادة الخبز أيضًا.
هل يمكنك إرشادي إلى كيفية القيام بذلك؟ إذا كان بإمكانك مشاركة بعض الأمثلة، فأنا لا أعرف الكثير عن لغة Ruby، لكن يمكنني العمل بلغة JavaScript وأنا جديد أيضًا على Discourse، لذلك لا أعرف الكثير عن تخصيص Discourse
def update_post_image
super # استدعاء الأصلي
if @post.custom_fields[:your_field_name_upload_id]
upload_id = @post.custom_fields[:your_field_name_upload_id]
@post.update_column(:image_upload_id, upload_id) # مشاركة
if @post.is_first_post? # موضوع
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
تم تحديث image_upload_id للمنشور والموضوع ولكن الصور لا تزال تُحذف. لقد استخدمت بالفعل وظيفة واجهة برمجة التطبيقات register_upload_in_use
لقد أضفت الكود أدناه للتحقق في custom_fields للموضوع حيث topic_file_upload هو اسم الحقل. هل هذه هي الطريقة الصحيحة للقيام بذلك؟
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: [upload.url, upload.sha1]
).exists?
end
end
ماذا يحتوي TopicCustomField؟ أفترض أنه يحتوي على معرف التحميل؟
في هذه الحالة، يجب أن يكون الأمر أشبه بـ
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: upload.id
).exists?
end
end
لديها عنوان URL للصورة ولكنني أضفت حقلاً جديدًا في الحقول المخصصة لمعرف الصورة والآن أتحقق من المعرف كما ذكرت في الكود. أعتقد أنه إذا كنت قد استخدمت الكود أدناه، فقد يعمل ربما؟