MailchimpにGibbon 2.2.4というユーザーを登録しようとしていますが、使用していた一般的なsubscribe
メソッドを使用しました。その後、追加のフィールドを追加して彼らが取ったクイズ。既存のメンバーでupsertを使用できません
Mailchimpのダッシュボードから直接送信したメールを管理したいので、このデータをMailchimpに保存します。
私は私のサブスクリプションを処理するために作成したサービス:subscribe_to_quiz
で
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
、私はMailchimpの私quiz_listにユーザーをサブスクライブしています。私がここで更新しているフィールドの値は無関係ですが、私はそれらが非常に説明的だと思います。私はsend_quiz_results
で私UPSERTステートメントを実行しようとすると、私は次のエラーを取得する:
the server responded with status 400
@title="Member Exists",
@detail="[email protected] 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"=>"[email protected] 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\":\"[email protected] is already a list member. Use PUT to insert or update list members.\",\"instance\":\"\"}",
@status_code=400
私はそれは私がこれをやらせない理由見当もつかない...それはcreate
文を参照しているように思えるが、抽出されたエラーの原因は、私のupsert
ステートメントを参照しています。
私はギボンのために、対応するPUT動詞を使用しています知っている次はストレートの文書から取られているので、:もちろん
、ボディのみが作成、更新、およびUPSERTコールでサポートされています。これらはそれぞれHTTP POST、PATCH、およびPUT動詞に対応します。
私はこれがうまくいかない理由を知りません...私は他のフィールドを取り出して、単に私が更新しているものを投げ込もうとしました。私はまた、何も重なっていないことを確認するために端末からまっすぐ走ってみました。
は、あなたがこれを知っているかを教えてもらえますか?しかし、抽出されたエラーのソースは私のupsertステートメントを参照しています。「エラーの抽出元はどういう意味ですか? –
これは、エラーが示す行です。私はもっと明確にすべきだったと思うし、ちょうどupsertコールがトレースの一番上にあると言いました。 – Doug
私はまた、メンバーからの*作成*をしようとしていないことを確認するために、ターミナルから明示的にupsertを呼び出しました。それはまだPOSTや何かをしているようですが... – Doug