如果他们不存在,请将某人订阅Mailchimp列表

时间:2015-05-27 09:24:05

标签: ruby-on-rails mailchimp gibbon

我最近添加了使用Gibbon gem从我的rails应用程序订阅mailchimp列表的功能。

完美地订阅人们在注册时列出,当他们登录时,它会在mailchimp列表上更新他们的信息(例如登录计数和last_login_date)。

然而,还有其他用户使用我要添加到mailchimp列表的应用程序,但由于他们已经拥有一个帐户,他们不会再次注册,因此无法订阅。< / p>

我尝试将if语句添加到登录页面,如果它们已经不存在,则会将它们订阅到列表中,但无法弄清楚语法。

例如,如果我测试它以找到我知道不存在的用户,就像这样:

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

然后它返回:

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

但我需要的只是一个真假......

我试过了:

include?

但这显然不起作用,因为它表示哈希的未定义方法{{1}} ...

关于如何将它变为真或假布尔值的任何想法?

2 个答案:

答案 0 :(得分:0)

好的,所以最后在尝试了几件不同的事情之后,我通过这样做来解决这个问题:

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

答案 1 :(得分:0)

如果您的目标只是发现电子邮件是否在您的列表中,那么最后一个答案效果很好。如果您的最终目标是&#34;创建或更新&#34;,那么您只想将update_existing参数传递给订阅调用。

有关详细信息,请参阅API Docs for /lists/subscribe