我正在尝试使用我一直在使用的通用方法通过Gibbon 2.2.4为用户订阅 Mailchimp subscribe
,然后不久我想添加一些额外的字段来跟踪他们进行的测验的结果。
我想将这些数据存储在 Mailchimp 上,因为我想管理我直接从 Mailchimp 仪表板发送的电子邮件。
我为处理订阅而创建的服务:
class MailchimpService
def subscribe(list_id,email,first_name)
GIBBON.lists(list_id).members.create({
body: {
email_address: email,
status: 'subscribed',
merge_fields: {
FNAME: first_name,
},
double_optin: false,
update_existing: true
}
})
end
def subscribe_to_quiz(first_name, email, user_id, quiz_id)
list_id = ENV['QUIZ_MAILCHIMP_LIST_ID']
if subscribe(list_id,email,first_name)
attempt = QuizAttempt.where("user_id = ? AND quiz_id = ?", user_id, quiz_id).last
correct = attempt.correct_answer_count
total = attempt.questions_answered
successful = attempt.successful?
send_quiz_results(list_id, email, correct, total, successful)
end
end
def send_quiz_results(list_id, email, correct, total, successful)
GIBBON.lists(list_id).members(email).upsert(
body: {
email_address: email,
status: 'subscribed',
merge_fields: {
correct_answers: correct,
total_answers: total,
successful: successful
},
update_existing: true
})
end
end
在subscribe_to_quiz
中,我正在为用户订阅我在 Mailchimp 中的 quiz_list。我在这里更新的字段的值是无关紧要的,但我认为它们很有解释性。当我尝试在 中运行 upsert 语句时send_quiz_results
,出现以下错误:
the server responded with status 400
@title="Member Exists",
@detail="foo@bar.baz is already a list member. Use PUT to insert or update list members.",
@body={"type"=>"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/", "title"=>"Member Exists", "status"=>400, "detail"=>"foo@bar.baz is already a list member. Use PUT to insert or update list members.", "instance"=>""},
@raw_body="{\"type\":\"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/\",\"title\":\"Member Exists\",\"status\":400,\"detail\":\"foo@bar.baz is already a list member. Use PUT to insert or update list members.\",\"instance\":\"\"}",
@status_code=400
我不知道为什么它不允许我这样做......它似乎引用了一个create
语句,但提取的错误源引用了我的upsert
语句。
我知道我正在为 Gibbon 使用相应的 PUT 动词,因为以下内容直接取自文档:
当然,body 仅在 create、update 和 upsert 调用中受支持。它们分别映射到 HTTP POST、PATCH 和 PUT 动词。
我不知道为什么这不起作用......我已经尝试取出其他字段,只是简单地放入我正在更新的字段。我还尝试直接从终端运行它,以确保没有重叠。