2012-03-10 12 views
5

मैंने काफी खोज की लेकिन मेरे सिर को इस के आसपास नहीं कर सकता।रूबी एकाधिक group_by या मानचित्र

मेरे पास एक मॉडल है जो तीन अन्य मॉडलों से संबंधित है। चलो इसे शहरों कहते हैं। शहरों में एक महाद्वीप, एक देश और क्षेत्र है।

जब मैं कुछ शहरों मैं एक OrderedHash वापस पाने के लिए चाहते हैं या एक सरणी जो इस तरह दिखता है का चयन करें:

{ 'Continent 1' => {'Country 1' => { 'Region 1' => { 'City 1', 'City 2' }}}, 'Continent 2' ...} 

मैं यह कैसे कर सकते हैं?

+0

क्षेत्र द्वारा समूहबद्ध करने और फिर सभी क्षेत्रों को उचित हैश में भरने में क्या समस्या है? –

+4

आप ActiveRecord मॉडल उदाहरणों का अनुवाद क्यों करना चाहते हैं जो उचित रूप से इस डेटा को हैश में मॉडल करते हैं जो खराब डेटा का प्रतिनिधित्व करता है और कार्यक्षमता की कमी करता है? – coreyward

+0

क्या यह रेल में है? –

उत्तर

6

बस क्षेत्र के आधार पर समूह:

cities_by_region = City.all(:group => :region) 

# set up an automatic 3-level hash... 
result = Hash.new { |h,k| h[k] = Hash.new { |h,k| h[k] = {}}} 

cities_by_region.each do |region, cities| 
    country = region.country 
    result[country.continent.name][country.name][region.name] = cities 
end 

ध्यान दें कि यह छँटाई का इस्तेमाल नहीं करता है, लेकिन यह आसानी से करने के लिए अनुकूलित किया जा सकता। ध्यान रखें कि हैश का सम्मिलन क्रम केवल रूबी 1.9+ में ही बनाए रखा जाता है।

संबंधित मुद्दे