我在后台启动了一个侧翼作业,它通过newsletter_info回调更新用户的后台after_commit异步。因此,如果用户在他的设置中更新他的语言,该语言也会在MailChimp中得到更新。除了电子邮件外,一切都很好。如果用户更新电子邮件,它将显示在日志消息中,并且将显示在正确的位置,但不会在mailchimp中更新。相反,一个拥有新电子邮件地址的新用户将被授予mailchimp列表.
因此,一个选择可能是删除旧的,但我认为这个解决方案是不干净的。
我的另一个想法是,虽然订阅者id和错误可能在那里产生,但电子邮件可能是。
非常感谢你的帮助,
你好,哈立德。
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发布于 2014-03-21 14:59:42
对我的问题的回答是:我已经提到过,电子邮件地址可能是mailchimp订阅者列表中的id。事实也是如此。
因此,我在模型中使用了以下代码来取消订阅旧的电子邮件入口,并将新用户添加到订阅列表中:
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 )并将新成员添加到列表中。
也许这不是最好的方法,但它正在起作用!)
感谢所有读过这个问题的人!
发布于 2021-01-04 13:02:16
电子邮件地址可以用长臂猿更改:
gibbon.lists(list_id).members(Digest::MD5.hexdigest(old_email))
.upsert({
body: { email_address: new_email }
})https://stackoverflow.com/questions/21781904
复制相似问题