UserUpdaterクラスでの一貫性のない動作

@eviltrout

再現手順:

  1. ユーザーフィールドを作成し、その ID を 1 とします。
  2. 以下のコードの 2 行目を 2 回実行します。

ケース 1

up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>
「いいね!」 4

これは確かに有効なバグのようですね。修正すべきです。ご報告ありがとうございます!

「いいね!」 4

私の分析は以下の通りです。

# case 1
u1 = User.find(1)
u1.custom_fields[:user_field_1] = "abc"
u1.save

# case 2
u1.custom_fields["user_field_1"] = "abc"
u1.save

ケース 1 では、u1.save を呼び出すたびに新しい UserCustomField が作成されます。

ケース 2 では、指定されたものを除き、名前が「user_field_1」であるすべての UserCustomField がデータベースから削除されます。
Screenshot 2020-08-20 at 11.56.49 AM

総じて、HasCustomFields ミックスインでは、同じキーの symbol 版と string 版が異なって扱われます。

「いいね!」 1

はい、実行しました。この問題に対処する PR です

「いいね!」 7

はい、これはマージされました。

「いいね!」 3