【发布时间】:2013-09-24 20:50:54
【问题描述】:
我继承了另一个程序员的 Rails3 项目,而且我对 Rails 总体来说还很陌生。他有一个查询,似乎按特定 ID 排序。有人可以解释这在实际 SQL 中是如何解决的吗?我认为这段代码正在杀死 db 并随后杀死 rails。我试图在记录器中输出它,但即使配置设置为:debug,似乎也无法输出实际的 SQL。在这里(在 SO 上)进行大量搜索并没有清楚地解释这个查询的外观。代码如下:
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 -
谢谢,从 rails 控制台得到了相同的输出。它看起来像这样:SELECT "products".* FROM "products" WHERE "products"."visible" = 't' AND "products"."id" IN (166, 105,..etc) ORDER BY id = 166 , id = 105, id = 110, id = 99, id = 109, id = 118, id = 108, id = 160,... 等等。我以前没见过这种类型的 ORDER BY,而且很酷.
标签: ruby-on-rails ruby-on-rails-3 activerecord