كيفية إضافة تروق وفضح في القضبان

بدأ الأسبوع الثاني من مشروعنا الهندسي لأكاديمية صناع. لقد مررنا بتجربة رائعة حتى الآن مع القضبان ونشعر الآن بأننا نتعرف على الجوانب الأكثر تعقيدًا. هذا الدليل هو مقدمة سريعة لإضافة الإعجابات إلى المشاركات.

إنشاء وحدة تحكم والطراز

أولاً ستحتاج إلى إنشاء النموذج:

القضبان ز نموذج مثل وظيفة: مراجع المستخدم: المراجع

ثم ، قم بترحيل الجدول:

القضبان ديسيبل: الهجرة

وأخيرًا ، أضف وحدة التحكم:

القضبان ز تحكم يحب

إضافة طريقة إنشاء إلى وحدة تحكم

الطبقة LikesController 
  مواطنه خلق
    @ post.likes.create (user_id: current_user.id)
    redirect_to post_path (@ post)
  النهاية
  نشر
  def find_post
    post = Post.find (params [: post_id])
  النهاية
النهاية

في التطبيق / المشاهدات / المنشورات / show.html.erb أضف هذا الرمز:

<٪ = button_to "أعجبني" ، post_likes_path (post) ، الطريقة:: post٪>

في ways.rb تداخل مورد التعليقات داخل مورد المنشورات:

الموارد: الوظائف تفعل
  الموارد: يحب
النهاية

الآن قم بتأسيس العلاقة بين العديد من المشاركات / المستخدمين وما يعجبهم. أنت تفعل هذا مثل ذلك:

في التطبيق / الموديلات / post.rb والتطبيق / الموديلات / user.rb ، أضف السطر:

has_many: الإعجابات ، التابعة:: إتلاف

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

في التطبيق / طرق العرض / المنشورات / show.html.erb أضف هذا السطر لعرض عدد مرات الإعجاب لدى المنشور:

<٪ = @ post.likes.count٪> <٪ = (@ post.likes.count) == 1؟ "أعجبني": "الإعجابات"٪>

بعد ذلك ، في التطبيق / طرق العرض / المنشورات / index.html.erb أضف هذا السطر لعرض عدد الإعجابات التي ينشرها المنشور في الصفحة الرئيسية:

<٪ = post.likes.count٪> <٪ = (post.likes.count) == 1؟ "أعجبني": "الإعجابات"٪>

هذا هو إظهار عدد الإعجابات. قليلا من المنطق بعد ذلك هو التغيير إلى الإعجابات أو الإعجابات بالاعتماد على العدد.

وقف الناس تروق أكثر من مرة

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

مواطنه بالفعل؟
  Like.where (user_id: current_user.id، post_id:
  بارامس [: POST_ID].) موجود؟
النهاية

ثم قم بتحرير طريقة الإنشاء الخاصة بك لحساب ذلك

مواطنه خلق
  إذا سبق لك؟
    flash [: إشعار] = "لا يمكنك الإعجاب أكثر من مرة"
  آخر
    @ post.likes.create (user_id: current_user.id)
  النهاية
  redirect_to post_path (@ post)
النهاية

يتحقق بيان "if" مما إذا كان هناك ما شابه في قاعدة البيانات باستخدام user_id الحالي و post_id الحالي ، مما يعني أنه يجب أن يكون قد سبق أن أعجبهما. إذا كان الأمر كذلك ، فنحن لا نضيف شخصًا آخر ونرسل رسالة خطأ.

إضافة ميزة بخلاف

في وحدة تحكم الإعجابات ، نحتاج إلى إضافة طريقة تدمير:

مواطنه تدمير
  إذا! (بالفعل أعجبني؟)
    flash [: إشعار] = "لا يمكن عكس ذلك"
  آخر
    @ like.destroy
  النهاية
  redirect_to post_path (@ post)
النهاية

في هذه الطريقة ، أتأكد أيضًا من أنهم لا يختلفون عندما لا يروق لهم ذلك.

من أجل حذف مثل تحتاج إلى العثور على مثل. لذلك ، نحتاج إلى إضافة طريقة find_like.

def find_like
   like = @ post.likes.find (params [: id])
النهاية

وتأكد من أن هذه الطريقة تسمى طريقة التدمير. ضع هذا في الجزء العلوي من وحدة التحكم:

before_action: find_like ، فقط: [: إتلاف]

الشيء الوحيد الذي يجب القيام به الآن هو إضافة زر خلافًا وتأكد من ظهوره إذا نقرت على مثل:

<٪ pre_like = @ post.likes.find {| like | like.user_id == current_user.id}٪>
<٪ if pre_like٪>
  <٪ = button_to "على عكس" ، post_like_path (post ، pre_like) ، الطريقة:: delete٪>
<٪ else٪>
  <٪ = button_to "أعجبني" ، post_likes_path (post) ، الطريقة:: post٪>
<٪ end٪>

أبدأ أولاً في العثور على مثل مع معرف المستخدم. إذا كان هناك واحد أقوم بإظهار الزر "عكس" وإذا لم يكن كذلك ، فأنا أعرض الزر "أعجبني". عندما ينقر المستخدم فوق حذف ، أقوم بتمرير المنشور وما شابه ، والذي يجده باستخدام find_post و find_like ومن ثم يدمر ما شابه.

إنتهيت!