عدد رابطة التحميل الحريصة مع أريل (القضبان 3)
-
25-09-2019 - |
سؤال
مهمة بسيطة: بالنظر إلى أن المقال يحتوي على العديد من التعليقات ، تكون قادرًا على عرضها في قائمة طويلة من المقالات كم عدد التعليقات التي لدى كل مقالة. أحاول معرفة كيفية تحميل هذه البيانات مع 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