从select()。distinct中删除id

时间:2016-04-06 07:05:51

标签: ruby-on-rails

我的控制器上有AR

areas = WaterQuality.select(:area_id, :area).distinct

问题是,结果总是idarea_idarea一起。我必须这样做才能从结果中删除id

areas = WaterQuality.select(:area_id, :area).distinct

new_areas = []
areas.each do |area|
  new_area = {
    :area_id => area.area_id,
    :area    => area.area
  }
  new_areas << new_area
end

respond_with(new_areas)

我将回复设为respond_to :xml, :json

如何只使用我定义的2个属性而没有任何其他属性的结果?

3 个答案:

答案 0 :(得分:0)

对我来说可能有点过头了,但我刚刚开始使用ActiveModel::Serializer并且我对此非常满意。

class WaterQualityDistinctSerializer < ActiveModel::Serializer
  attributes :area_id, :area
end

答案 1 :(得分:0)

你可以尝试:

WaterQuality.all.map { |record| record.slice(*%w(area_id area)).symbolize_keys }

甚至:

WaterQuality.all.map { |record| record.slice(*%w(area_id area)) }

这将在控制台中返回略有不同的哈希,但是相同的json或xml。

答案 2 :(得分:0)

你可以试试这个 -

results = WaterQuality.select(:area_id, :area).distinct.as_json
results_without_id = results.each {|h| h.delete("id")}

这会返回一个带键/值对的哈希数组。

希望它有所帮助!