gpt4 book ai didi

ruby-on-rails - 不能对现有成员使用 upsert

转载 作者:可可西里 更新时间:2023-11-01 16:06:29 29 4
gpt4 key购买 nike

我正在尝试使用 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。我在这里更新的字段的值是无关紧要的,但我认为它们非常具有解释性。当我尝试在 send_quiz_results 中运行我的 upsert 语句时,出现以下错误:

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 动词,因为以下内容直接取自文档:

当然,只有在创建、更新和更新插入调用时才支持正文。它们分别映射到 HTTP POST、PATCH 和 PUT 动词。

我不知道为什么这不起作用...我尝试删除其他字段,只是简单地放入我正在更新的字段。我也试过直接从终端运行它以确保没有任何重叠。

最佳答案

MailChimp API docs显示更新成员时必须提供成员的 subscriber_hash,即成员电子邮件地址的小写版本的 MD5 哈希。

使用 Digest::MD5.hexdigest 使用 MD5 散列电子邮件地址:

GIBBON.lists(list_id).members(Digest::MD5.hexdigest(email.downcase)).upsert

关于ruby-on-rails - 不能对现有成员使用 upsert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402331/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com