红宝石:使哈希=哈希=>设置
我有一个连接表,我正在使用它来查找订单的可用服务;在该表中是utility_id
和company_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}
我将如何做到这一点?
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}}
HABTM关系(我正在使用has_many,通过)实际上是在'Company'和'Utility'之间; “服务”是我的加入模式。是的,我正在使用Rails(忘了提及那个)。我将如何改变你上面写的与我的设置一起工作? – neezer 2009-11-14 22:53:22
修改为符合您的模型对象。 – 2009-11-15 01:15:24
我困惑于“公司-1”来自何处。如果它只是一个数字序列,难道你不希望有一个数组作为每个散列值吗?所以:'{“utility-1”=> [company_id,company_id],“utility-2”=> [company_id,company_id]}' – DigitalRoss 2009-11-14 21:57:59
抱歉;我的意思是说,“公司-1”只是一家公司的名称,与另一家“公司-2”分开,而不是实际上增加了价值。上面编辑。 – neezer 2009-11-14 22:35:34