4

我有一个空的演示 rails 4 应用程序尝试执行以下操作:Collection.order('created_at ASC').uniq.pluck :name它在 sqlite 下工作,但在 postgres 中出现以下错误:

(0.9ms)  SELECT DISTINCT "collections"."name" FROM "collections" ORDER BY created_at ASC
PG::Error: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...collections"."name" FROM "collections"   ORDER BY created_at...

这是一个错误还是我该如何解决?

4

3 回答 3

2

这似乎是 PostgreSQL 的一个问题。(Rails 3 DISTINCT QUERY

要解决它,您可以使用 select 代替:

Collection.select([:name, :created_at]).order('created_at ASC').uniq.select(:name)

或者你可以让 Ruby 获得唯一的名称而不是 SQL:

Collection.order('created_at ASC').pluck(:name).uniq

于 2013-07-05T17:28:33.737 回答
2

我实际上是在尝试在 active_admin 上解决这个问题。https://github.com/gregbell/active_admin/issues/2324

现在解决方案似乎是Collection.reorder('name asc').uniq.pluck :name,这将覆盖 default_scope 或以前的订单,并使用name. 这里奇怪的是reorder工作,而order导致问题......

于 2013-07-05T20:18:40.337 回答
1
Collection.select([:id, :created_at]).order('created_at ASC').uniq.pluck(:id)
于 2013-07-05T16:57:14.590 回答