我有一个空的demo 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...
这是一个错误或我该如何解决?
答案 0 :(得分: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
答案 1 :(得分:2)
我实际上是在尝试在active_admin上解决此问题。 https://github.com/gregbell/active_admin/issues/2324
现在解决方案似乎是Collection.reorder('name asc').uniq.pluck :name
,这将覆盖default_scope或之前的订单,并使用name
订购集合。这里奇怪的是reorder
有效,而order
导致问题......
答案 2 :(得分:1)
Collection.select([:id, :created_at]).order('created_at ASC').uniq.pluck(:id)