Rails: запрос метода - PullRequest
       1

Rails: запрос метода

0 голосов
/ 23 января 2019

У меня есть модель Airport со столбцом country и методом #region.

Airport.where(country:"United States"), запрашивая столбец, возвращает хороший полезный «массив» объектов AR классаAirport::ActiveRecord_Relation.

Однако:

Airport.where(region: nil)      
  Airport Load (1.8ms)  SELECT "airports".* FROM "airports" WHERE "airports"."region" IS NULL                                                                                              
=> #<Airport::ActiveRecord_Relation:0x3fecc5d319f8>

Это тот же класс, но в значительной степени "запечатанный ящик", который я не могу назвать #count или #firstили что-нибудь в этом роде.

Я могу получить "правильный массив", используя select, но тогда моя консоль выдает zillion SQL-запросов вместо одного.

Как получить нужные данные в виде доступного массива?

1 Ответ

0 голосов
/ 23 января 2019

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 внутри него, в этот момент нам нужно увидеть определение метода для принятия любых других суждений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...