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 に答える