2011-10-27 53 views
0

我的消費者模型上有一個類作用域的類方法(作用範圍爲ActiveRecord::Relation,返回ActiveRecord::Relation,可以菊花鏈方式)並返回某些使用者的雙打。我希望它只返回唯一的消費者,並且我似乎無法找到使用Rails助手或正確的SQL傳入以獲得我想要的內容的方法。我覺得這裏有一個簡單的解決方案 - 這不是一個複雜的問題。強化基於單列的關係的唯一性

我基本上想要Array#uniq,但是對於ActiveRecord::Relation。我嘗試了SELECT DISTINCT聲明

Consumer.joins(...).where(...).select('DISTINCT consumers.id') 

它歸還的財產正確的「關於consumers.id獨特性」,但它只是返回的消費者的ID,這樣當我最終加載的關係中,消費者並沒有自己其他屬性。 沒有SELECT DISTINCT:

my_consumer = Consumer.joins(...).where(...).first 
my_consumer.status # => "active" 

使用select distinct:

my_consumer = Consumer.joins(...).where(...).select('DISTINCT consumers.id').first 
my_consumer.status # => ActiveModel::MissingAttributeError: missing attribute: status 

我沒想到的是一個ActiveRecord::Relation將永遠載入小於整個模型,但我想它會與SELECT語句。當我在包含它的類的select語句後查詢Relation時,它返回Consumer,這看起來很奇怪。

回答

0
.select('DISTINCT consumers.*')