اليوم كنت أبحث عن إضافة فلتر مخصص لـ 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
أشارك هذا جزئياً كملحوظة لتذكير نفسي بهذا النهج، ولكن أيضاً لأتساءل عما إذا كان لدى أي شخص اقتراحات للتحسينات أو نهج أفضل.