سؤال

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

قسم "التجميعات المعقدة" من ReadMe يبدو أن الملف يناقش هذا النوع من الموقف ، لكنه لا يقدم بالضبط رمزًا عينة ، كما أنه لا يوفر طريقة للقيام بذلك في استفسارين بدلاً من استعلام واحد مرتبط ، وهو ما هو أسوأ بالنسبة للأداء.

بالنظر إلى ما يلي:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

كيف يمكنني التحميل المسبق لمقال ما هو عدد التعليقات التي يمتلكها كل منها؟

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل شيئًا سيئًا باستخدام SQL مثل:

default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'

وبعد ذلك ، سيكون بإمكانك الوصول إلى article.first.count_comments.

طريقة أخرى (أجمل) للقيام بذلك هي استخدام ميزة/خيار "counter_cache" ينتمي إلى جمعية.

نصائح أخرى

ألا يمكنك استخدام ذاكرة التخزين المؤقت المضادة لهذا؟

belongs_to :article, :counter_cache => true

تحتاج أيضًا إلى الحصول على ترحيل يضيف Column Comments_count

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top