2014-02-14 60 views
0

我開始在後臺通過after_commit回調更新用戶newsletter_info async在後臺的sidekiq工作。因此,如果用戶在他的設置中更新他的語言,那麼語言也會在MailChimp中更新。除emailadresse以外,一切正常。如果用戶更新他的emailadresse,它將顯示在日誌消息中,並且它將在正確的位置,但不會在mailchimp中更新。相反,一個新用戶與新emailaddress得到adedeed到mailchimp列表...長臂猿更新電子郵件

所以一個選項可能是刪除舊的,但我認爲該解決方案不乾淨。

我的另一個想法是,也許emailadresse是雖然用戶名和那裏的錯誤可能會誕生。

非常感謝您的幫助,

問候,Khaled。

def update_newsletter_info(args) 
    NDC.push "KHALED -- " 
    Rails.logger.debug "UPDATENEWSLETTERINFO ARGS: #{args}" 
    XIXI::Workflow.for(TwitterUsersMaintainer, args) do |workflow, user| 
    Rails.logger.debug "INFOS IN UPDATENEWSLETTERINFO #{user.locale} #{user.email}" 
    gb = Gibbon::API.new 
    cfg = XOXO::Mailchimp.config 

    gb.lists.subscribe(
     :id => cfg.list_id, 
     :email => { :email => user.email }, 
     :merge_vars => { 
     :mc_language => user.locale, 
     :groupings => [ 
      { name: cfg.group_name, groups: [ user.recurring_payment? ? 'basic' : 'free' ] } 
     ] 
     }, 
     :double_optin => !!cfg.double_optin, 
     :update_existing => true, 
     :send_welcome => !!cfg.send_welcome 
    ) 

    # continue 
    workflow.continue_with(user) 
    end 
    NDC.pop 
end 

回答

1

回答我的問題是: 我已經提到過的電子郵件地址可能是雖然在mailchimp用戶列表中的ID。就這樣。

所以我用這個代碼在模型中取消了舊的電子郵件地址和新的用戶添加到subscriberlist:

if self.previous_changes.include?("email") 
     email = self.previous_changes[:email][0] 
     UsersMaintainer.perform_async(action: :unsubscribe_newsletter, email: email) 
    end 
    UsersMaintainer.perform_async(action: :update_newsletter_info, user_id: self.id) 

和新成員添加到列表中。

也許這不是最好的方法,但它工作! ;)

感謝任何讀過這個問題的人!

相關問題