2013-12-19 37 views
1

我从我们的电子邮件提供商的API中检索用户信息。他们每页返回25个订阅者的散列。我想将每个页面的结果合并成一个散列(@members_subs_all)。但是,虽然我的方法正确地返回@members_subs @members_subs_all不包含任何数据。如何在Ruby中合并来自API的哈希结果?

合并正确的方法?如果是这样,我错过了什么让这个工作正常?如果不是,我应该做些什么不同?

def retrieve_members_info 
    @members_subs_all = {} 
    pages =* (0..1000) 
    pages.each do |i| 
    @members_subs = # API returns hash of 25 subscribers per page 
     @members_subs_all.merge(@members_subs) 
     break if @members_subs["data"].empty? 
    end 
    puts "members_subs_all #{@members_subs_all["data"]}" 
end 

回答

1

你想merge!而非mergemerge返回合并散列的值,但不会更改所调用散列的值。 merge!返回合并后的散列值将其被调用的散列值更新为该值。

比较每个文档:

还请注意,这是在Ruby和Ruby库命名的模式:

  • method回报对调用者的一些改变的值,但不改变来电者的价值永久。
  • method!返回更改的值并使用该值更新调用者。

(参见method?它们是返回基于与否method是呼叫者的真truthy值谓词。)

+0

感谢您的。我也需要移动合并!语句在休息之后执行。 – analyticsPierce

+0

啊......好多了。谢谢。 – analyticsPierce

+0

让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/43615/discussion-between-analyticspierce-and-telemachus) – analyticsPierce

0
def merge_hashs(a,b) 
    a.merge(b) {|key, a_v, b_v| merge_hashs(a_v, b_v) } 
end