我正在从数据库加载数据并将其保存为常量,如下所示:
profession = Hash.new
Profession.all.each do |p|
profession[p.name] = p.unique_profession
profession[p.name]['descr'] = p.description # problem
profession[p.name]['created_at'] = p.created_at # problem
end
在profession[p.name]['descr']
行出现此错误:
undefined method `[]=' for 1:Fixnum (NoMethodError)
我想使用profession
之类的:
<div>Profession name: <%= profession[p.name] %></div>
<div>Description: <%= profession[p.name]['descr'] %></div>
如何将profession
作为一个[name]
和两个[name][descr]
参数使用?
答案 0 :(得分:1)
您从空哈希开始:
{}
然后,对于每个职业记录,您分配profession[p.name] = p.unique_profession
。假设unique_profession
是Fixnum
,这意味着你得到了这个:
{
'ProfessionName1' => 1,
'ProfessionName2' => 2
}
等等。
您无法将子键分配给Fixnum - 它不是哈希值。您可能希望使用以下数据结构之一(我将按照代码的结构来创建它):
{
'ProfessionName1' => {
'descr' => 'Description of Profession 1',
'created_at' => '2016-05-08T22:33:38.093753Z'
},
'ProfessionName2' => {
'descr' => 'Description of Profession 2',
'created_at' => '2015-04-09T21:23:33.093753Z'
}
}
profession = Hash.new
Profession.all.each do |p|
profession[p.name] = Hash.new
profession[p.name]['descr'] = p.description
profession[p.name]['created_at'] = p.created_at
end
或只是包含每个属性的哈希数组:
[
{
'name' => 'ProfessionName1',
'descr' => 'Description of Profession 1',
'created_at' => '2016-05-08T22:33:38.093753Z'
},
{
'name' => 'ProfessionName2',
'descr' => 'Description of Profession 2',
'created_at' => '2015-04-09T21:23:33.093753Z'
}
]
profession = []
Profession.all.each do |p|
profession << {
'name' => p.name,
'descr' => p.description,
'created_at' => p.created_at
}
end
答案 1 :(得分:0)
如果你想使用哈希,你需要存储“unique_profession”&#39;进入一把新钥匙。
<div>Profession name: <%= profession[p.name]['unique'] %></div>
<div>Description: <%= profession[p.name]['descr'] %></div>
然后你可以这样做(但请注意输出将是一个数字,unique_profession的内容):
profession = Hash.new
Profession.all.each do |p|
profession[p.name] = []
profession[p.name][:unique] = p.unique_profession
profession[p.name][:descr] = p.description
profession[p.name][:created_at] = p.created_at
end
最后,我建议使用符号而不是字符串(因为这是Ruby方式):
<div>Profession name: <%= profession[p.name][:unique] %></div>
<div>Description: <%= profession[p.name][:descr] %></div>
然后
{{1}}
另一方面,您可以直接存储和使用Profession实例。