Попробуйте что-то вроде этого:
Person.joins('left outer join pets on persons.id=pets.person_id').
select('persons.*,pets.id').
where('pets.id is null')
Я не проверял это, но оно должно работать.
Идея состоит в том, что мы выполняем внешнее левое соединение, поэтомуполя домашних животных будут нулевыми для каждого человека, у которого нет домашних животных.Возможно, вам потребуется включить :readonly => false
в объединение, поскольку ActiveRecord возвращает объекты только для чтения, когда join()
передается строка.