Ruby on rails Rails:如何取消uniq调用的作用域?

Ruby on rails Rails:如何取消uniq调用的作用域?,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我有一个关系,其中调用了uniq,如下所示: rel = Car.where(brand: 'Audi').order(:price).uniq 现在,我想取消对uniq(DISTINCT)部分的作用域,以便执行以下操作: rel.limit(30).pluck(:id) 因为这会给我一个错误,比如: ActiveRecord::StatementInvalid: PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY

我有一个关系,其中调用了
uniq
,如下所示:

rel = Car.where(brand: 'Audi').order(:price).uniq
现在,我想取消对uniq(DISTINCT)部分的作用域,以便执行以下操作:

rel.limit(30).pluck(:id)
因为这会给我一个错误,比如:

ActiveRecord::StatementInvalid: PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

这是由于查询调用:
selectdistinct(id)从品牌=‘奥迪’按价格订购的汽车中,我希望它执行以下操作:
从品牌=‘奥迪’按价格订购的汽车中选择id
-但是我不知道如何仅取消停止
不同的
部分?

为什么不定义另一个没有uniq的变量?如果你想去

SELECT id FROM cars WHERE brand = 'Audi' ORDER BY price
那么我想

rel_2 = Car.where(brand: 'Audi').order(:price)
rel_2.pluck(:id)
您可以使用
distinct(false)
覆盖
uniq

rel = Car.where(brand: 'Audi').order(:price).uniq
rel.distinct(false).limit(30).pluck(:id)

uniq
的目的是什么?为什么您的查询会返回相同的
id
s而没有
uniq
?该关系是基于大量搜索条件动态创建/确定范围的,并传递给该片段代码,它只需提取与搜索匹配的前30个id,因为该关系作为参数从代码中的另一个位置传递,它相当长,有很多不同的范围。