2014-09-12 81 views
2

AR聲明:在下面的MySQL查詢排除ID列從ActiveRecord的結果

Phone.select(:number).distinct.where(in_black_list: true) 

結果:

SELECT DISTINCT number FROM phones WHERE phones.in_black_list = 1 

結果中包含空的標識:

#<ActiveRecord::Relation [ 
    #<Phone id: nil, number: "1234567">, 
    #<Phone id: nil, number: "78567459">, 
    #<Phone id: nil, number: "78567457">, 
    #<Phone id: nil, number: "998567946794567">, 
]> 

如何消除這些ID ?

回答

2

select返回模型對象。您的查詢僅指示ActiveRecord將結果限制爲僅包含number。你可以從關係中提取你需要的任何數據。例如,如果你想要的號碼作爲數組,你能做到這一點有:

Phone.select(:number).distinct.where(in_black_list: true).map(&:number) 
# => ["1234567", "78567459", ... ] 

要避免的ActiveRecord創建模型對象,並從MySQL的要求只有一列,用pluck

Phone.distinct.where(in_black_list: true).pluck(:number) 
# => ["1234567", "78567459", ... ]