في صفحة التفاعل/التفاعل المستلم في النشاط/الإشعار، يوجد خطأ.
عندما يحاول المستخدم التمرير لأسفل وتحميل الصفحة التالية، ستتم إضافة نفس العناصر إلى القائمة، مما يسبب التكرار.
ينبع الخلل من عدم التوافق بين الواجهة الأمامية (frontend) والواجهة الخلفية (backend). المعرّف (id) المحدد في الواجهة الأمامية هو post_id بينما تتطلب الواجهة الخلفية reaction_id.
يوجد طلب سحب (PR) مسودة هنا، يرجى مراجعته عندما يكون ذلك مناسبًا.
شكرًا على مسودة طلب السحب (PR)، يبدو أن ترقيم الصفحات للتفاعلات غير دقيق الآن ويبدو أنه يتكرر.
لست متأكدًا مما إذا كان الإصلاح الصحيح هو تعيين post_id. يبدو أن ترقيم الصفحات يستخدم before_reaction_user_id (انظر هنا). ربما يساعد حتى إزالة السطر 27 (طلب السحب) لأنه من المحتمل أن يتم تعيينه في reaction المسطح أعلاه.
لتوضيح الأمر، أعتقد أن before_reaction_user_id يجب أن يكون المعرّف (id) من discourse_reactions_reaction_users - أعتقد أن اسم المتغير هذا مربك بعض الشيء. لا تتردد في توضيح أي شيء هنا أو في الدردشة.
لقد تحققت واكتشفت سبب فشل اختبار rspec.
يؤكد الاختبار الأصلي على مكون بخاصية expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\").
ومع ذلك، تم تغيير #{post_1.id} إلى reaction_user_id في آخر تثبيت (commit)، مما تسبب في عدم تطابق، أدى إلى الفشل.
الفكرة الأصلية كانت تغيير id ليناسب حاجة واجهة برمجة التطبيقات (API)، ولكني أغفلت حقيقة أن id يُستخدم أيضًا في PostList كـ post_id، كما يلي:
لذا، لا ينبغي تغيير سلوك id الأصلي، لأن هذا قد يسبب عدم تطابق خطير في postList، مما يؤدي مباشرة إلى فشل اختبار rspec بالأمس.
كحل بديل، قد تكون هناك طريقة أخرى لحل هذه المشكلة:
إضافة حقل جديد reaction_user_id: reaction.id عند استدعاء flattenForPostList، ثم تعديل الدالة #getLastIdFrom(array) من return array.length ? array[array.length - 1].id : null; إلى return array.length ? array[array.length - 1].reaction_user_id.
باختصار (TL:DR):
إن reaction_id و post_id والآن reaction_user_id كلها مختلفة تمامًا، ولكن id المستخدم في مكون postList يجب أن يكون post_id. بينما id المطلوب لجلب الصفحة التالية يجب أن يكون reaction_user_id، وهذا محير للغاية.