لقد استغرقت بعض الوقت للبحث في هذا، ولكن أعتقد أنني وجدت السبب. أعتقد أن الأمر يتعلق بـ هذا الكود:
def fetch_uploads(params:, guardian:)
return [] if !SiteSetting.chat_allow_uploads
guardian.user.uploads.where(id: params.upload_ids) # بالتحديد، هنا
end
عند إنشاء رسالة دردشة جديدة، يتم استدعاء هذا لجلب الملفات المرفوعة لإرفاقها بالرسالة. ربما لضمان الملكية، تمر الطريقة عبر مستخدم Guardian لجلب الملفات المرفوعة للسماح فقط بالملفات المرفوعة التي تخص هذا المستخدم.
المشكلة هي أن الملفات المرفوعة يتم إزالة التكرار منها، كما هو موضح هنا:
# هل لدينا بالفعل هذا الملف المرفوع؟
@upload = Upload.find_by(sha1: sha1)
# ...
# إرجاع الملف المرفوع السابق إن وجد
if @upload
add_metadata!
UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
return @upload
end
أعتقد أن الحل الممكن سيكون المرور عبر UserUploads بدلاً من مجرد النظر إلى الملفات المرفوعة التي تخص المستخدم. يربط UserUpload الملفات المرفوعة بعدة مستخدمين، وهو ما يبدو أننا نحتاجه. لست متأكدًا بنسبة 100٪ بعد من كيفية القيام بذلك بشكل صحيح؛ لقد تأخر الوقت، لذا سأذهب للنوم، ولكن إذا لم يقم شخص آخر بإصلاحه، فسأحاول العودة لاحقًا والعمل على طلب سحب. ![]()