تصفية المواضيع حسب الفئات باستخدام حقل مخصص، أو سلالاتها

اليوم كنت أبحث عن إضافة فلتر مخصص لـ TopicQuery يتضمن أي موضوع في فئة معينة تم تفعيل حقل مخصص فيها، أو أي فئات فرعية (بحد أقصى 3 مستويات) تابعة لفئة “مفعّلة”، حتى لو لم يكن الحقل مفعّلاً في الفئات الفرعية.

هذا ما توصلت إليه، أي استعلام تكراري مع استعلام category_custom_field كشرط غير تكراري. هذا النهج يعمل.

TopicQuery.add_custom_filter(:custom_enabled) do |result, query|
    if ActiveModel::Type::Boolean.new.cast(query.options[:custom_enabled])
      result = result.where("
        topics.category_id IN (
          WITH RECURSIVE enabled_categories(id) AS (
             SELECT category_id AS id
             FROM category_custom_fields
             WHERE name = 'custom_enabled'
             AND value::boolean IS TRUE

             UNION ALL

             SELECT categories.id
             FROM categories, enabled_categories
             WHERE categories.parent_category_id = enabled_categories.id
          )
          SELECT id FROM enabled_categories
        )
      ")
    end

    result
 end

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

3 إعجابات