2014-09-12 3 views
2

AR заявление:Исключить ID столбец из ActiveRecord результатов

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

Результаты в следующем запросе MySQL:

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">, 
]> 

Как устранить эти идентификаторы ?

ответ

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", ... ]