2009-11-14 100 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