【发布时间】:2015-01-08 11:58:34
【问题描述】:
我正在尝试对我的资产进行排序,以便它们根据用户数量以降序显示。此代码在 Postgres 中有效,但在 Ruby 中似乎无效。不知道出了什么问题。任何帮助表示赞赏。提前谢谢你。
def order_assets
@asset = Asset.select("assets.id, count(assets_users.asset_id) as the_count")
.joins("LEFT OUTER JOIN assets_users ON assets.id = assets_users.asset_id")
.group("assets.id")
.having("count(*) > 0")
.order("the_count")
end
我希望所有带有黄色的资产都在顶部,而下面有用户填写的资产。
Postgres 代码:
SELECT
assets.id,
count(assets_users.asset_id) as the_count
FROM assets
LEFT OUTER JOIN assets_users ON assets.id = assets_users.asset_id
GROUP BY assets.id
HAVING count(*) > 0
ORDER BY the_count;
这就是 Postgres 的出现方式:
【问题讨论】:
-
您是否尝试将
.to_sql添加到您的 ActiveRecord 查询中?该方法将返回它创建的 SQL。这可能会帮助您找到来自 Rails 的查询和纯 SQL 查询之间的差异。此外,您写的似乎不起作用,您能具体说明一下吗? -
.to_sql的输出与我输入的 sql 代码完全相同。而且,ruby 代码似乎对资产的顺序没有任何影响。 -
所以 Rails 中的结果没有像预期的那样排序? Rails 中的顺序是什么?
-
您是否可能以某种方式重新排序视图层中的结果?
-
@San 原来是这样,是的。
标签: ruby-on-rails ruby postgresql join