A volte ci imbattiamo in problemi di concorrenza con i campi personalizzati.
Un esempio è un gestore di webhook che fa questo
user_id = params[:externalUserId].split('-')[1]
user = User.find_by(id: user_id)
raise Discourse::NotFound unless user
... fare un sacco di elaborazione ...
user.custom_fields[:myfield] = params[:whatever]
user.save_custom_fields
Quando due webhook vengono attivati in rapida successione per lo stesso utente, a volte finiamo con una riga duplicata. La prossima volta che si accede ai campi personalizzati dell’utente, essi appaiono come
{"myfield"=>["value", "value"]}
Vedo che (user_id, name) è definito come un indice ma non univoco su user_custom_fields.
Quale sarebbe il modello migliore per evitare che ciò accada?