カスタムフィールドで競合状態の問題が発生することがあります。
例として、次のような処理を行うWebhookハンドラがあります。
user_id = params[:externalUserId].split('-')[1]
user = User.find_by(id: user_id)
raise Discourse::NotFound unless user
... 多くの処理を行う ...
user.custom_fields[:myfield] = params[:whatever]
user.save_custom_fields
同じユーザーに対して2つのWebhookが連続して発生すると、重複行が発生することがあります。次にユーザーカスタムフィールドにアクセスすると、次のようになります。
{"myfield"=>["value", "value"]}
(user_id, name) が user_custom_fields のインデックスとして定義されていますが、ユニークではないようです。
これを防ぐための最善の方法は何でしょうか?