2017-04-06 39 views
1

我有一個地方uniq已呼籲樣的關係:Rails:我如何查看uniq電話?

rel = Car.where(brand: 'Audi').order(:price).uniq 

現在我想unscope的uniq(不同)的一部分,所以我可以做:

rel.limit(30).pluck(:id) 

因爲這會給我錯誤如下:

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

這是由於查詢調用:SELECT DISTINCT(id) FROM cars WHERE brand = 'Audi' ORDER BY price我想要它要做:SELECT id FROM cars WHERE brand = 'Audi' ORDER BY price - 但我不知道如何取消只DISTINCT部分?

+2

是什麼'uniq'的用途在這裏?爲什麼你的查詢在沒有'uniq'的情況下返回相同的'id'? – AbM

+0

該關係是基於大量搜索條件動態創建/作用域的,並傳遞給此代碼段,該代碼段只需摘取匹配搜索結果的前30個ID –

回答

0

您可以使用distinct(false)覆蓋uniq

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

爲什麼你不定義另一個變量沒有uniq?如果你試圖去

SELECT id FROM cars WHERE brand = 'Audi' ORDER BY price 

那麼我認爲

rel_2 = Car.where(brand: 'Audi').order(:price) 
rel_2.pluck(:id) 

會做的伎倆

+0

因爲該關係作爲參數從另一個地方傳遞代碼,並且它很長,並且有很多範圍 - 這有所不同。 –