Manchmal stoßen wir auf Nebenläufigkeitsprobleme mit benutzerdefinierten Feldern.
Ein Beispiel ist ein Webhook-Handler, der Folgendes tut:
user_id = params[:externalUserId].split('-')[1]
user = User.find_by(id: user_id)
raise Discourse::NotFound unless user
... viel Verarbeitung durchführen ...
user.custom_fields[:myfield] = params[:whatever]
user.save_custom_fields
Wenn zwei Webhooks für denselben Benutzer in schneller Folge ausgelöst werden, erhalten wir manchmal eine doppelte Zeile. Wenn das nächste Mal auf die benutzerdefinierten Felder des Benutzers zugegriffen wird, sehen sie so aus:
{"myfield"=>["value", "value"]}
Ich sehe, dass (user_id, name) als Index definiert ist, aber nicht eindeutig für user_custom_fields.
Was wäre das beste Muster, um dies zu verhindern?