Ruby 将结果记录到控制台
使用以下方法,我在将哈希属性打印到控制台时遇到问题,有人能告诉我正确的方向吗Ruby 将结果记录到控制台,ruby,hash,console,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}" de
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
谢谢您提供的代码片段的问题是当您尝试访问它时,
attrs
超出了范围。尝试在映射块的外部(之前)声明attrs
。您需要在map
外部声明attrs
变量
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
或更明确的使用方法:
仅针对
compact
方法的提示Hash
内置Ruby
中不可用,仅限Rails
什么是results
?你能举个例子吗?请你解释一下这里发生了什么,顺便谢谢你的回答。。哦,对了,我没有意识到这一点,谢谢,但是当我使用它时,如果返回一个nil值,它将作为{}compact
返回,仅在rails
中可用,并在变量attrs
哈希累加器中解释,然后迭代结果并将数据累积到attrs
。对于这种情况,Look-tap文档是非常酷的方法。在您的例子中,您在迭代器范围内分配了迭代器范围外不可用的attrs
变量。那么这是否意味着如果我只想打印对象id,我可以(从您的第一个示例中)使用puts attrs['object\u id']?@richliewis yep,在map
的内部或外部。当我现在放置格式化的数据时,我注意到了一些事情(结果)在我的get_feed方法中,我现在获得了所有对象ID的列表,而不是块中的所有键/值
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