السماح بالتعليقات على روبي على القضبان

في التكرار السابق ، إضافة مصادقة RESTful ، تمت إضافة المصادقة إلى مدونتك بحيث يمكن فقط للمستخدمين المصرح لهم إنشاء مشاركات المدونة. سيضيف هذا التكرار الميزة النهائية (والرائدة) في البرنامج التعليمي للمدونة: التعليقات. بعد الانتهاء من هذا البرنامج التعليمي ، سيتمكن المستخدمون من نشر تعليقات مجهولة المصدر على مشاركات المدونة دون تسجيل الدخول.

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

بمجرد تحديد أعضاء بيانات التعليق ، يمكنك تشغيل منشئ السقالة. لاحظ أن حقل البريد من نوع "المراجع". هذا هو نوع خاص من شأنه إنشاء حقل معرف لربط جدول التعليقات بجدول المنشورات عبر مفتاح خارجي.

بمجرد إنشاء وحدات التحكم والترحيل ، يمكنك المضي قدمًا وتشغيل الترحيل عن طريق تشغيل db: ترحيل ترحيل أشعل النار.

instagram viewer

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

تحتوي منشور المدونة على العديد من التعليقات. لا تتطلب علاقة has_many أي حقول خاصة في جدول المنشورات ، ولكن يحتوي جدول التعليقات على post_id لربطها بجدول المنشورات. من عند القضبان، يمكنك أن تقول أشياء مثل @اكتب تعليقا للحصول على قائمة بكائنات التعليق التي تنتمي إلى كائنpost. التعليقات هي أيضا يعتمد على كائن المشاركة الرئيسي. إذا تم إتلاف كائن Post ، فيجب إتلاف كل كائنات التعليقات الفرعية.

تعليق ينتمي إلى كائن نشر. لا يمكن ربط التعليق إلا بنشر مدونة واحدة. لا تتطلب علاقة تنتمي إلى سوى حقل post_id واحد في جدول التعليقات. للوصول إلى كائن نشر أصل للتعليق ، يمكنك قول شيء مثل @ comment.post في ريلز.

فيما يلي نماذج النشر والتعليق. تمت إضافة العديد من عمليات التحقق إلى نموذج التعليق لضمان قيام المستخدمين بملء الحقول المطلوبة. لاحظ أيضًا علاقات has_many و ينتمي إلى.

لن يتم استخدام وحدة التحكم في التعليقات بالطريقة التقليدية التي يتم بها استخدام وحدة تحكم RESTful. أولاً ، سيتم الوصول إليه فقط من طرق عرض المشاركة. توجد أشكال التعليق والعرض بالكامل في إجراء العرض لوحدة التحكم في البريد. لذا ، بادئ ذي بدء ، احذف الكل التطبيق / وجهات النظر / التعليقات دليل لحذف جميع طرق عرض التعليقات. لن تكون هناك حاجة.

بعد ذلك ، تحتاج إلى حذف بعض الإجراءات من وحدة تحكم التعليقات. كل ما هو مطلوب خلق و هدم أجراءات. يمكن حذف جميع الإجراءات الأخرى. نظرًا لأن أداة التحكم في التعليقات هي الآن مجرد كعب لا يحتوي على طرق عرض ، يجب عليك تغيير بعض الأماكن في وحدة التحكم حيث تحاول إعادة التوجيه إلى وحدة تحكم التعليقات. حيثما يكون هناك مكالمة redirect_to ، قم بتغييرها إلى redirect_to (@ comment.post). أدناه هو تحكم التعليقات كاملة.

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

والخطوة الأخيرة هي عرض الواقع تعليقات. يجب توخي الحذر عند عرض بيانات إدخال المستخدم حيث قد يحاول المستخدم إدراج علامات HTML مما قد يعطل الصفحة. لمنع هذا ، ح يتم استخدام الطريقة. ستفلت هذه الطريقة من أي علامات HTML يحاول المستخدم إدخالها. في تكرار آخر ، يمكن تطبيق لغة ترميز مثل RedCloth أو طريقة تصفية للسماح للمستخدمين بنشر علامات HTML معينة.

سيتم عرض التعليقات بشكل جزئي ، تمامًا كما كانت المشاركات. قم بإنشاء ملف يسمى app / views / posts / _comment.html.erb ووضع النص التالي فيه. سيعرض التعليق ، وإذا قام المستخدم بتسجيل الدخول ويمكنه حذف التعليق ، اعرض أيضًا رابط Destroy لتدمير التعليق.

أخيرًا ، لعرض جميع تعليقات المنشور مرة واحدة ، اتصل بالتعليقات الجزئية مع : collection => @ post.comments. سيؤدي ذلك إلى استدعاء التعليقات جزئية لكل تعليق ينتمي إلى المنشور. أضف السطر التالي إلى طريقة العرض show في وحدة تحكم المشاركات.

في التكرار التعليمي التالي ، سيتم استبدال simple_format بمحرك تنسيق أكثر تعقيدًا يسمى RedCloth. يسمح RedCloth للمستخدمين بإنشاء محتوى بترميز سهل مثل * غامق * للخط الغامق و_المائل_ للخط المائل. سيكون هذا متاحًا لكل من ملصقات المدونة والمعلقين.