在迭代期间将键/值对添加到哈希时的TypeError

时间:2013-09-21 20:53:27

标签: ruby hash

我认为我误解了以下代码中的哈希值:

require 'rest-client'
require 'json'

def get_from_mashable
  res = JSON.load(RestClient.get('http://mashable.com/stories.json'))

  res["hot"].map do |story|
    s = {title: story["title"], category: story["channel"]}
    add_upvotes(s)
  end
 end

def add_upvotes(hash)
  hash.map do |story|
    temp = {upvotes: 1}
    if story[:category] == "Tech"
      temp[:upvotes] *= 10
    elsif story[:category] == "Business"
      temp[:upvotes] *= 5
    else
      temp[:upvotes] *= 3
    end
  end
  hash.each {|x| puts x}
end

get_from_mashable()

我从中得到以下错误:

ex_teddit_api_news.rb:16:in `[]': no implicit conversion of Symbol into Integer (TypeError)

我正在尝试将upvotes键和相应的整数值添加到从get_from_mashable中的JSON对象创建的每个哈希中。在循环中,我不是要删除每个哈希的内容,而只用新的键/值对替换它,我有一种感觉,我可能会这样做。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

由于您没有提供足够的信息,我们只能猜测,但很可能story是一个数组,而不是哈希值。

答案 1 :(得分:1)

这将返回一个哈希数组,其中每个哈希都有键标题,类别和upvotes。

require 'rest-client'
require 'json'

def get_from_mashable
  res = JSON.load(RestClient.get('http://mashable.com/stories.json'))

  res["hot"].map do |story|
    s = {title: story["title"], category: story["channel"], upvotes: get_upvotes(story["channel"]) }
  end
end



def get_upvotes(category)
    case category
      when "Tech" 
       10
      when "Business"  
       5
      else  
       3
     end
end

get_from_mashable()