Необработанный SQL в области ruby ​​/rails

Я хочу понять разницу между следующими двумя версиями рельсов. Я считаю, что их функциональность одинакова. Однако я наблюдаю большое различие в сгенерированном SQL при использовании их обоих.


Версия 1 (RAW SQL)

scope :ignore_unavailable, lambda { 
  where(["Item.id not in (select id from Cars where Cars.status = 'NA'"])
}


Версия 2

scope :ignore_unavailable, lambda { 
ids = Cars.select("id").where("status = 'NA'");
idsStr = ''
idsarr = ids.collect{|car| car.id}.flatten
where(["Item.id not in (" + idsarr.join(",") + ")"])
}

Мне кажется, что версия 2 генерирует больше оптимизированных запросов, чем версия 1, но я не понимаю, почему это так. Кто-нибудь может объяснить, что здесь может происходить?

0 ответов

Другие вопросы по тегам