2016-04-06 12 views
0

私はこれが問題になる私のコントローラ削除ID()。明確な

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

にARで持っているが、結果は常にarea_idareaと一緒idを持っています。結果から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) 

私は私が他の属性なしで定義されている唯一の2属性で結果を持つことができますどのようにrespond_to :xml, :json

として応答を設定しますか?

+0

'WaterQuality.pluck(:area_id、:area).uniq' - レコードの配列を返します。これはあなたのために働くでしょうか? – dp7

+0

それは配列です。 json形式のようなキー値の結果が必要です。 – spondbob

答えて

0

あなたはこれはあなたのキー/値のペアを持つハッシュの配列を返しますthis-

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

を試すことができます。

希望すると助かります!

+0

はい、これは私が必要としている正確な出力を持つことができる最も近い解決策です。私が持っているものよりも少ないライン。しかし、私はまだ 'id 'が' distinct'から抽出されているのだろうと私は疑問を抱いていますが、 'select ' – spondbob

0

あなたのために少し上にあるかもしれませんが、私は少し前にActiveModel::Serializerを使用し始めました。私はとても満足しています。

class WaterQualityDistinctSerializer < ActiveModel::Serializer 
    attributes :area_id, :area 
end 
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を返します。