将结果记录到控制台

时间:2014-04-30 08:08:40

标签: ruby hash console

使用以下方法我无法将打印出来的哈希表打印到控制台,有人能指出我正确的方向吗

class FacebookFeed
#Constants
VANDALS_ID = ENV['VANDALS_FB_ID']
FB_ACCESS_TOKEN = ENV['FACEBOOK_ACCESS_TOKEN']
FACEBOOK_URL = "https://graph.facebook.com/#{VANDALS_ID}/posts/?access_token=#{FB_ACCESS_TOKEN}"

def get_feed
  uri = URI(FACEBOOK_URL)
  response = HTTParty.get(uri)
  results = JSON.parse(response.body) 
end

def formatted_data(results)
return unless results

 results['data'].map { |m| 

attrs = { message: m['message'], 
        picture: m['picture'], 
        link: m['link'], 
        object_id: m['object_id']
      }.compact #remove entries that are nil
   }
     #PUTS ATTRS DOES NOT WORK FOR ME


end

end

由于

2 个答案:

答案 0 :(得分:1)

您提供的代码段的问题是当您尝试访问它时attrs超出范围。尝试在地图块之外(之前)声明attrs

答案 1 :(得分:1)

您需要在attrs

之外声明map变量
def formatted_data(results)
  return unless results
  attrs = {}
  results['data'].map do |m| 
    attrs[:message]   = m['message']
    attrs[:picture]   = m['picture']
    attrs[:link]      = m['link']
    attrs[:object_id] = m['object_id'] 
  end
  attrs
end

或更明确使用Object#tap方法:

def formatted_data(results)
  return unless results
  attrs = {}.tap do |acc|
  results['data'].map do |m| 
    acc[:message]   = m['message']
    acc[:picture]   = m['picture']
    acc[:link]      = m['link']
    acc[:object_id] = m['object_id'] 
  end
  attrs
end

仅针对内置compact Hash中未提供的提示Ruby方法,仅适用于Rails