Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果某个人还不存在,请向其订阅邮件黑猩猩列表_Ruby On Rails_Mailchimp_Gibbon - Fatal编程技术网

Ruby on rails 如果某个人还不存在,请向其订阅邮件黑猩猩列表

Ruby on rails 如果某个人还不存在,请向其订阅邮件黑猩猩列表,ruby-on-rails,mailchimp,gibbon,Ruby On Rails,Mailchimp,Gibbon,我最近添加了一个功能,可以使用Gibbon gem从我的rails应用程序订阅邮件黑猩猩列表 当人们注册时,它可以完美地为他们订阅列表,当他们登录时,它会更新他们在mailchimp列表上的信息,例如登录计数和上次登录日期 然而,还有其他用户在使用我想添加到mailchimp列表中的应用程序,但因为他们已经有了一个帐户,他们不会再注册,因此不会获得订阅 我正在尝试向登录页面添加一个if语句,如果它们不存在,则将它们订阅到列表中,但无法理解语法 例如,如果我测试它以找到一个我知道不存在的用户,如下

我最近添加了一个功能,可以使用Gibbon gem从我的rails应用程序订阅邮件黑猩猩列表

当人们注册时,它可以完美地为他们订阅列表,当他们登录时,它会更新他们在mailchimp列表上的信息,例如登录计数和上次登录日期

然而,还有其他用户在使用我想添加到mailchimp列表中的应用程序,但因为他们已经有了一个帐户,他们不会再注册,因此不会获得订阅

我正在尝试向登录页面添加一个if语句,如果它们不存在,则将它们订阅到列表中,但无法理解语法

例如,如果我测试它以找到一个我知道不存在的用户,如下所示:

Gibbon::API.lists.member_info({:id => list_id, :emails => [{:email => "d@duncanma.com"}]})
然后返回这个:

{"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)?
但这显然不起作用,因为它说未定义的方法包括?对于哈希


关于如何将其转换为真布尔值或假布尔值,有什么想法吗?

好的,在尝试了一些不同的方法后,我最终通过这样做解决了这个问题:

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

如果你的目标仅仅是发现一封电子邮件是否在你的名单上,那么最后的答案很有效。如果您的最终目标是创建或更新,那么您只需要将update\u现有参数传递到subscribe调用中


有关更多详细信息,请参阅。

我可以建议一个有点笨拙的解决方案,但我已经使用Gibbon::API.lists.members{:id=>list\u id}获取列表的所有成员,并手动解析响应以检查是否存在特定用户。嗯,我想我可以这样做,但这感觉有点笨拙,正如你所说的……名单上已经包括了几千人,这可能会让整个过程慢一些,对吧?