Вы можете сделать что-то вроде этого:
class CountryList < ActiveRecord::Base
def self.without_countries
joins(:country).
select("country_lists.*, COUNT(countries.id) AS country_count").
group("country_lists.id").
having("country_count = 0")
end
end
но, пожалуйста, обратите внимание, это может быть не самый быстрый запрос на западе.
лучшим подходом будет использование счетчика ActiveRecord counter_cache, но для этого нужен дополнительный столбец, и это своего рода денормализация, подробности можно найти здесь . counter_cache
определенно намного быстрее, и если вы не выйдете из ActiveRecord, т. Е. Вы не будете манипулировать своей базой данных с помощью необработанного SQL, минуя свой ActiveRecord ORM, денормализация не повредит вам.
кстати. я предполагаю, что вы имели в виду
CountryList.all.select do |country_list|
country_list.countries.empty?
end