У меня есть отношение родитель/потомок в моем приложении
class Polling
has_many :alerts, :dependent => :destroy
class Alert
belongs_to :polling
На моей индексной странице для предупреждений мне нужно показать некоторые данные от каждого родителя, и это приводит к двум запросам
Alert Load (6.1ms) SELECT * FROM (SELECT * FROM "ALERTS" INNER JOIN "POLLINGS" ON "POLLINGS"."ID" = "ALERTS"."POLLING_ID" ORDER BY "ALERTS"."ID" DESC) WHERE ROWNUM <= 1
Polling Load (1.8ms) SELECT "POLLINGS".* FROM "POLLINGS" WHERE "POLLINGS"."ID" = 10113 AND ROWNUM <= 1
Очевидно, что это делает время загрузки страницы довольно ужасным, поскольку она должна перебирать каждую страницу и также извлекать родительский объект.
Я пробовал несколько вещей, таких как
> Alert.joins(:polling).where(...)
> Alert.includes(:polling).where(...)
> Alert.joins(:polling).select('*').where(...)
И каждый раз, когда я посещаю свою индексную страницу, я получаю два разных запроса. Один для каждого оповещения, а затем еще один для получения родительских данных. Как я могу сделать это в одной строке, чтобы при извлечении предупреждений я также получал связанные с ними родительские данные? Кажется, нет никакого способа сделать это с другого конца, потому что, если я сделаю Pollings.where(...)
, это не захватит детей как группу.