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