2015-05-27 1 views
1

Недавно я добавил возможность подписки на список mailchimp из моего приложения rails с использованием Gibbon gem.Подписывать кого-то в список 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? для Hash ...

Любые идеи о том, как я могу получить его к истинному или ложному логическое значение?

+0

Я могу предложить немного неудобное решение, но я сделал это, получив все члены списка, используя 'Gibbon :: API.lists.members ({: id => list_id})' и ручную разборку ответа, чтобы проверить, там существует конкретный пользователь. – usmanali

+0

Хм, я думаю, я мог бы это сделать, но это похоже на неловкое решение, как вы сказали ... список уже включает в себя несколько тысяч человек, чтобы можно было немного замедлить процесс, не так ли? – camillavk

ответ

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 
0

Если ваша цель только выяснить, действительно ли по электронной почте в вашем списке, то последний ответ работает хорошо. Если ваша конечная цель - «создать или обновить», вы просто хотите передать параметр update_existing в вызов подписки.

Для получения более подробной информации см. API Docs for /lists/subscribe.