2013-12-19 65 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