我正在使用active-admin显示具有以下查询的用户列表。
SELECT
agent_id,
COUNT(*) filter (where price BETWEEN 1 AND 200000) as stat_1,
from users
group by agent_id
order by stat_1 desc
LIMIT 20 OFFSET 0
Rails标准:
User
.select('agent_id, COUNT(*) filter (where price BETWEEN 1 AND 200000) as stat_1').page(params[:page]).per(20)
.group(:agent_id)
.page(params[:page]).per(20)
.order('stat_1 desc')
在ActivAdmin中
paginated_collection(users) do
table_for collection, sortable: true do
....
....
end
end
但是paginate_collection会抛出错误
PG::UndefinedColumn: ERROR: column "stat_1" does not exist
SELECT COUNT(*) AS count_all, agent_id AS agent_id FROM "users"
GROUP BY "users"."agent_id"
ORDER BY stat_1 desc LIMIT 20 OFFSET 0
我如何解决这个问题?
答案 0 :(得分:0)
它不是因为Activeadmin而是因为PostgreSQL。
实际上你试图使用PostgreSql不允许的ORDER BY子句的列别名,并且总是会抛出错误。当你尝试使用别名时,其他子句也会发生同样的情况:
GROUP BY , 的具有下, ORDER BY 等
通过定义CASE,这个answer就是一个很好的例子。
答案 1 :(得分:0)
我通过更改ActiveAdmin中的paginated_collection.rb
行#131
这
entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
到
entries_name = I18n.translate key, count: collection.total_count, default: entry_name.pluralize