2014-04-30 119 views
0

用下面的方法,我有麻烦打印到控制台哈希ATTRS,任何人都可以点我在正确的方向,请日志结果来安慰

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 

感谢

+1

结果是什么?你可以添加一个例子吗? – aelor

回答

1

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

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 

而就在仅仅内置Ruby,提示compact方法不可用HashRails

+0

你介意解释一下这里发生的事情吗,谢谢你的回答..哦,对于紧凑,没有意识到这一点,谢谢,虽然当我使用它,如果返回一个零值,它返回为{} – Richlewis

+0

'compact'只在'rails'中可用,并在变量'attrs'散列累加器中解释,然后迭代结果并将数据累加到'attrs'。在这种情况下查看tap文档是非常酷的方法。在你的情况下,你在迭代器作用域中分配'attrs'变量,这是迭代器不可用的。 –

+0

所以这意味着如果我只想打印出object_id,我可以(从你的第一个例子)使用puts attrs ['object_id']? – Richlewis