2012-03-10 33 views
5

Tôi đã tìm kiếm khá nhiều nhưng không thể xoay quanh cái này.Ruby nhiều group_by hoặc bản đồ

Tôi có một mô hình liên quan đến ba mô hình khác. Hãy gọi nó là thành phố. Các thành phố có một lục địa, một quốc gia và khu vực.

Khi tôi chọn một số thành phố tôi muốn lấy lại một OrderedHash hoặc một mảng mà trông như thế này:

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

Làm thế nào tôi có thể làm điều này?

+0

Sự cố với chỉ nhóm theo vùng và sau đó nhồi tất cả các vùng vào mã băm thích hợp? –

+4

Tại sao bạn muốn dịch các phiên bản mô hình ActiveRecord mô hình thích hợp dữ liệu này thành một băm không đại diện cho dữ liệu và thiếu chức năng? – coreyward

+0

Đây có phải là trong Rails không? –

Trả lời

6

Chỉ cần nhóm theo vùng:

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 

Lưu ý rằng điều này không sử dụng phân loại, nhưng nó có thể dễ dàng thích nghi để làm. Hãy nhớ rằng thứ tự chèn của băm chỉ được giữ lại trong Ruby 1.9+.

Các vấn đề liên quan