2012-05-08 9 views
0

has_many "performances"とパフォーマンスが特定の "location"を持つモデル "show"を持っています。 2つ以上のパフォーマンスが同じ場所にある可能性があります。モデルから一意のオブジェクトを収集するにはどうすればいいですか

私は、ショーの公演で使用されたすべての場所を取得する方法を探していますが、1回だけです(場所Xで3回のパフォーマンスがある場合は、Xを1回だけ取得する必要があります)。

編集:私は今このフォームにあります:オブジェクトの配列[[performance_id:1, location_id:1],[performance_id:2, location_id:1],[performance_id:3, location_id:2]]。 [1,2](一意のlocation_id)を含む配列を取得するにはどうすればよいですか?

答えて

2

のようなものがそれを行います場合、私は配列にカンマを追加してください:

[ 
    [performance_id:1, location_id:1], 
    [performance_id:2, location_id:1], 
    [performance_id:3, location_id:2] ].flatten.map {|h| h[:location_id]}.uniq 

=> [1, 2] 
+4

Ruby 1.9で 'uniq'はブロックをとることができるので、' ... flatten .uniq {| h | h [:location_id]} '、' map'を除いています。 –

1

ない、これはおそらくあなた

show.performances.collect(&:location).uniq 
+0

を、私はこのフォームでは今です:オブジェクトの配列[[performance_id:1、location_id:1] [performance_id:2、location_id:1] [performance_id:3、location_id:2]]。 [1,2](一意のlocation_id)を含む配列を取得するにはどうすればよいですか? – gabitzish

1

ため

Location.joins(:performances).where(:performances => { :show_id => 5 }).group("locations.id") 
+0

私は今このフォームにいます:オブジェクト[[performance_id:1、location_id:1] [performance_id:2、location_id:1] [performance_id:3、location_id:2]]の配列。 [1,2](ユニークなlocation_id)を含む配列を取得するには – gabitzish

+0

your_array.collect(&:location_id).uniq – bcd