Я унаследовал проект Rails3 другого программиста, и я довольно новичок в рельсах в целом. У него есть запрос, который сортируется по определенным идентификаторам. Может ли кто-нибудь объяснить, как это происходит в реальном SQL? Я думаю, что этот код убивает db и впоследствии рельсы. Я попытался вывести его в регистраторе, но, похоже, не может получить фактический SQL для вывода даже с настройкой конфигурации: debug. Поиск тяжело здесь (на SO) не выявил четкого объяснения того, как выглядит этот запрос. Код выглядит следующим образом:Сортировать по определенным идентификаторам в ActiveRecord
options = {
select: "SUM(1) AS num_demos, product_id ",
group: "product_id",
order: "num_demos ASC",
}
product_ids = Demo.where("state = 'waitlisted'").find(:all, options).collect{|d| d.product_id}
sort_product_ids = product_ids.collect{|product_id| "id = #{product_id}"}
Product.where(visible: true, id: product_ids).order(sort_product_ids.join(', '))
Насколько я понимаю, последняя строка будет создать запрос к таблице продукта с ORDER BY «ID = 1, ID = 3, ...» и т.д., которые не имеет большого смысла для меня. Все подсказки оценили.
использования 'to_sql' в конце запроса и проверить его, чтобы увидеть SQL генерируется – tihom
Спасибо, получил тот же результат с рельсов консоли. Это выглядит так: SELECT "products". * FROM "products" WHERE "products". "Visible" = 't' AND "products". "Id" IN (166, 105, .. и т. Д.) ORDER BY id = 166 , id = 105, id = 110, id = 99, id = 109, id = 118, id = 108, id = 160, ... и т. д. Я еще не видел этот тип ORDER BY, и это довольно круто , –