从ActiveRecord结果中排除ID列

时间:2014-09-12 10:37:53

标签: ruby-on-rails activerecord

AR声明:

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

以下MySQL查询结果:

SELECT DISTINCT number FROM phones WHERE phones.in_black_list = 1

结果包含空ID:

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

如何消除这些ID?

1 个答案:

答案 0 :(得分:2)

select返回Model对象。您的查询仅指示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", ... ]