ActiveRecord несет полную ответственность за получение информации из базы данных для вас - и поскольку region
- это метод модели Airport
, а не столбец базы данных, вы не получите ожидаемый результат.Это легко увидеть в сгенерированном операторе SQL для вашего запроса - он ищет столбец с именем region
:
SELECT "airports".* FROM "airports" WHERE "airports"."region" IS NULL
Ваша интуиция о том, что select
является правильным способом сделать это, верна.Использование select
не должно генерировать пакет SQL-запросов.Попробуйте:
Airport.all.select { |a| a.region.nil? }
и проверьте сгенерированный SQL.Вы должны увидеть что-то вроде:
Airport Load (7.1ms) SELECT "airports".* FROM "airports"
То есть, если у #region
нет других запросов ActiveRecord внутри него, в этот момент нам нужно увидеть определение метода для принятия любых других суждений.