أقوم بقفل موضوع عبر واجهة برمجة التطبيقات (gem) وأستطيع قفله وفتحه إذا كان هذا هو الأمر الوحيد في السلسلة، ولكن عندما أنشئ مشاركة في الموضوع مسبقًا، وكان الأمر التالي هو قفله - فإنه ينشئ المشاركة، ثم يقفل الموضوع، لكنه يفتحه فورًا بعد ذلك!
هذا أمر غريب جدًا. إذا قمت فقط بإنشاء المشاركة، أو فقط بقفل الموضوع، فإن الأمر يعمل بشكل صحيح. لكن إذا حاولت القيام بكليهما، ينتهي الأمر بفتح الموضوع تلقائيًا في النهاية!
لقد قررت مؤقتًا عدم قفل الموضوع، لكنني فكرت في النشر هنا في حال كان الأمر يستحق التحقيق.
اكتشاف ممتاز، سأقوم بالتحقيق في هذا عندما تتاح لي الفرصة. دمج هذين استدعاءي الـ API في طلب واحد لا يتبع بدقة الطريقة المتبعة في واجهة المستخدم (لا يمكنك إنشاء موضوع جديد مقفل)، لذا من المرجح أن نقطة نهاية الـ API هذه لا تبحث عن علامة القفل، أو أنها تقوم افتراضيًا بإلغاء قفل الموضوع عند إنشائه.
تفحصت هذا قليلاً اليوم لأرى ما إذا كان التغيير بسيطًا، لكن العديد من الإجراءات التي يمكنك تطبيقها على المواضيع يُفضل تنفيذها بعد إنشاء الموضوع. أحد الأسباب هو أننا يجب أن نستخدم بالفعل TopicStatusUpdater لإغلاق الموضوع بدلاً من تحديثه مباشرة في قاعدة البيانات، ولكن عند تحديث الحالة أثناء إنشاء الموضوع، يبدو أنه يُغلق الموضوع قبل إنشاء المنشور الأول، مما يؤدي إلى هذا السلوك الغريب:
أهلاً، الآن فهمت. لقد أسأت فهم ما كنت تفعله بالضبط. ظننت أنك تحاول إنشاء موضوع وإغلاقه في نفس الوقت. ومع ذلك، فإن ردي السابق لا يزال ساريًا عند إنشاء منشور في موضوع موجود ثم إغلاقه في نفس الوقت. يجب عليك ببساطة استخدام نقطتي النهاية المنفصلتين.
لقد اختبرت الكود الخاص بك محليًا وهو يعمل بشكل جيد من جانبي. ما الذي لا يعمل؟ أفترض أن المنشور يتم إنشاؤه، لكن الموضوع لا يُغلق فحسب؟ إذا كان الأمر كذلك، يرجى استخدام puts وطباعة نتيجة @client.change_topic_status(slug, topic_id, params)؟
كملاحظة جانبية، عند النظر إلى الكود في مكتبة API (gem)، نلاحظ أننا لا نستخدم المتغير slug على الإطلاق، لذا سأقوم بإجراء تحديث لإزالته.