0

我想我误解了关于下面代码的哈希:

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键和相应的整数值添加到从 .json 对象创建的每个哈希中get_from_mashable。在循环中,我不会尝试删除每个哈希的内容并仅用新的键/值对替换它,我感觉我可能正在这样做。

任何帮助表示赞赏。

4

2 回答 2

1

这将返回一个散列数组,其中每个散列具有键标题、类别和赞成票。

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()
于 2013-09-21T22:38:07.760 回答
1

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

于 2013-09-21T21:04:09.957 回答