Необработанный 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, но я не понимаю, почему это так. Кто-нибудь может объяснить, что здесь может происходить?