Ruby: сделать хеш из Hash => Set - PullRequest
0 голосов
/ 15 ноября 2009

У меня есть таблица соединений, которую я использую для поиска доступных услуг для формы заказа; в этой таблице есть utility_id и company_id.

Мне нужна группа (хеш), где ключами являются имена утилит, а значениями являются хэши соответствующих компаний.

Я получил следующее ...

Service.find(:all).to_set.classify { |service| Utility.find(service.utility_id).name }

... который очень хорошо дает мне хэш, где ключами являются имена утилит, но значения устанавливают записей сервиса, а не только названия компаний (мне не нужны фактические записи), и я не могу понять, как бы я сделал хеш, который я хочу:

# example of what I would like to have
{"electricity" => {"conEd" => 1, "Dominian" => 2}, "gas" => {"conEd" => 1}} 
# where the key is Utility.name, and the value-hash is {Company.name => Company.id}

Как бы я это сделал?

1 Ответ

1 голос
/ 15 ноября 2009

find(:all) предлагает мне Rails, поэтому, если у вас есть HABTM между моделями Utility и Service правильно, этот фрагмент работает для моей тестовой среды:

results = Hash.new
Utility.find(:all).each do |utility|
  results[utility.name] = Hash.new
  utility.companies.each do |company|
    results[utility.name][company.name] = company.id
  end
end
results

Который производит

{"Communications"=>{"InternetCo"=>2, "PhoneCo"=>1}, "Energy"=>{"ElectricCo"=>4, "GasCo"=>3, "OilCo"=>5}}
...