我正在从数据库中加载数据并将其保存到如下常量中:
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]参数使用?
发布于 2016-07-31 14:51:19
从空哈希开始:
{}然后,对于每个职业记录,您都分配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发布于 2016-07-31 14:54:11
如果要使用散列,则需要将“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 # problem
profession[p.name]['created_at'] = p.created_at # problem
end然后您就可以这样做了(但是注意输出将是一个数字,unique_profession的内容):
<div>Profession name: <%= profession[p.name]['unique'] %></div>
<div>Description: <%= profession[p.name]['descr'] %></div>最后,我建议使用符号而不是字符串(因为这就是Ruby的方式):
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然后
<div>Profession name: <%= profession[p.name][:unique] %></div>
<div>Description: <%= profession[p.name][:descr] %></div>另一方面,您可以直接存储和使用专业实例。
https://stackoverflow.com/questions/38684770
复制相似问题