2015-05-27 55 views
1

我最近加入到認購人使用長臂猿寶石我的Rails應用一個mailchimp列表的功能。訂閱有人Mailchimp列表,如果他們不存在

它可以正常使用認購人,當他們註冊到列表中,當他們登錄它更新自己的mailchimp列表(例如,登錄次數和last_login_date)上的信息。

但也有其他用戶使用,我想補充到mailchimp名單,但因爲他們已經有一個帳戶,他們不打算重新註冊,因此將不會認購的應用程序。

我想添加一個if語句可以讓他們訂閱列表,如果他們不這樣做已經存在,但不能找出語法登錄頁面。

如果,例如,我測試發現,我知道不存在的用戶,就像這樣:

Gibbon::API.lists.member_info({:id => list_id, :emails => [{:email => "[email protected]"}]}) 

然後返回此:

{"success_count"=>0, "error_count"=>1, "errors"=>[{"email"=>{"email"=>"[email protected]"}, "error"=>"The id passed does not exist on this list", "code"=>232}], "data"=>[]} 

但我需要什麼只是真或假...

我已經試過:

Gibbon::API.lists.member_info({:id => list_id, :emails => [{:email => "[email protected]"}]}).include("success_count"=>0)? 

但因爲它說的哈希未定義的方法include?顯然是行不通的......

我如何能得到它的真或假的布爾任何想法?

+0

我可以提出一個有點尷尬的解決方案,但我已經做到了使用'長臂猿:: API.lists.members獲取列表中的所有成員({:ID => LIST_ID})'和手動分析,以檢查是否響應一個特定的用戶存在那裏。 – usmanali

+0

嗯,我想我可以做到這一點,但這感覺像是一種尷尬的解決方案,正如你所說的......列表中已經包含了幾千人,這可能會使程序減慢很多,對吧? – camillavk

回答

0

OK所以最終嘗試一些不同的東西,我身邊這讓做這個之後:

begin 
    @list_member = Gibbon::API.lists.member_info({:id => list_id, 
          :emails => [{:email => current_user.email}] 
          }) 
    if @list_member["success_count"] = 1 
    Gibbon::API.lists.update_member({:id => list_id, 
       :email => {:email => current_user.email}, 
       :merge_vars => {:MMERGE4 => current_user.trips.count, 
       :MMERGE13 => Date.today, 
       :MMERGE5 => current_user.miles_sailed} 
       }) 
    elsif @list_member["success_count"] = 0 
    Gibbon::API.lists.subscribe({:id => list_id, 
       :email => {:email => current_user.email}, 
       :merge_vars => {:FNAME => current_user.name, 
       :LNAME => current_user.last_name, 
       :MMERGE3 => current_user.login}, 
       :double_optin => false}) 
    end 
rescue Gibbon::MailChimpError => e 
    return redirect_to root_path, :flash => {error: e.message} 
end 
0

如果你的目標只是爲了發現電子郵件是你的名單上,這最後的答案效果很好。如果您的最終目標是「創建或更新」,那麼您只需將update_existing參數傳遞給訂閱調用。

有關詳細信息,請參閱API Docs for /lists/subscribe

相關問題