2009-11-14 97 views
0

我有一個連接表,我正在使用它來查找訂單的可用服務;在該表中是utility_idcompany_id紅寶石:使哈希=哈希=>設置

我想要的是一個組(散列),其中的鍵是實用程序名稱,值是相應公司的散列值。

我得到了以下...

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

...它非常漂亮,給我一個散列結果,其中的關鍵是實用程序名,但值設置 S的服務記錄,而不是隻是公司名稱(我不需要實際的記錄),我想不通我怎麼會做哈希我想:

# 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} 

我將如何做到這一點?

+0

我困惑於「公司-1」來自何處。如果它只是一個數字序列,難道你不希望有一個數組作爲每個散列值嗎?所以:'{「utility-1」=> [company_id,company_id],「utility-2」=> [company_id,company_id]}' – DigitalRoss 2009-11-14 21:57:59

+0

抱歉;我的意思是說,「公司-1」只是一家公司的名稱,與另一家「公司-2」分開,而不是實際上增加了價值。上面編輯。 – neezer 2009-11-14 22:35:34

回答

1

find(:all)建議Rails的我,所以假設你有正確的工具和服務模型之間的HABTM,此片段適合我的測試環境:

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}} 
+0

HABTM關係(我正在使用has_many,通過)實際上是在'Company'和'Utility'之間; 「服務」是我的加入模式。是的,我正在使用Rails(忘了提及那個)。我將如何改變你上面寫的與我的設置一起工作? – neezer 2009-11-14 22:53:22

+0

修改爲符合您的模型對象。 – 2009-11-15 01:15:24