Ваш вопрос состоит из двух частей:
1.Выбор категорий с подкатегориями.
Если у вас много данных - лучше использовать счетчик кэша - добавить product_sub_categories_count
столбец к категориям, установить counter_cache:true
на own_to и вызвать ProductCategory.reset_counters(id, :product_sub_categories)
для каждого идентификатора категории после миграции для заполнения.
А затем:
scope :with_subcategories, ->{ where('product_sub_categories_count > 0') }
Другим простым решением для небольших наборов данных является вычисление этого во время выполнения:
scope :with_subcategories, ->{
joins(:product_sub_categories).group(:id).select("product_categories.*, count(*) as product_sub_categories_count").
having('product_sub_categories_count > 0')
}
2.Используя это в grouped_collection_select
Когда у нас есть область действия - это становится проще:
class Industry
...
has_many :product_categories_with_subcategories, ->{ with_subcategories }
end
f.grouped_collection_select :product_category_id, Industry.all,
:product_categories_with_subcategories, :name, :id, :name,