我有两张桌子。一个用于帐户,另一个用于关键字我想迭代所有关键字并将每个关键字存储在哈希中 - 按添加关键字的帐户ID分组。我在下面的代码不会将每个关键字添加到哈希。例如,我有一个有2个关键字条目的帐户。我的代码跳过第一个条目,只将第二个条目添加到哈希值。
@keyword_hash = {}
@account.each do |key, value|
@keywords.where(:profile_id => key).each do |keyword|
@keyword_hash[key] = keyword.entry
end
end
puts @keyword_hash
如何修改上述代码,以便将特定帐户的每个关键字条目添加到哈希?
我希望能够执行@keyword_hash [6]并获取该帐户的keyword1,keyword2,keyword3等。谢谢!
答案 0 :(得分:0)
试试此代码
@keyword_hash = Hash.new { |h, k| h[k] = [] }
@account.each do |key, value|
@keywords.where(:profile_id => key).each do |keyword|
@keyword_hash[key] << keyword.entry
end
end
puts @keyword_hash
您所犯的错误是您在key
哈希中为每个@keyword_hash
存储一个值。因此,当您的代码针对帐户密钥写入第二个值时,它会替换先前的值而不是添加第二个值。
编辑:感谢@mudasobwa关于共享默认值的更正。
答案 1 :(得分:0)
@keyword_hash = Hash.new { |hash, key| hash[key] = [] }
@keywords.group_by{ |k| k.profile_id }.each do |key,value|
@keyword_hash[key] = value.map(&:entry)
end
puts @keyword_hash
在做了一些研究后,我找到了上述解决方案。我使用了@jvillian关于group_by的建议,我发现这个article向我展示了如何初始化哈希。
答案 2 :(得分:0)
创建一个数组[keyword1,keyword2,keyword3等],然后将其添加到哈希
**
@keyword_hash = {}
@account.each do |key, value|
arr = []
@keywords.where(:profile_id => key).each do |keyword|
arr << keyword.entry
end
@keyword_hash[key] = arr
end
puts @keyword_hash
**