再現手順:
- ユーザーフィールドを作成し、その ID を
1とします。 - 以下のコードの 2 行目を 2 回実行します。
ケース 1
up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>
再現手順:
1 とします。up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>
これは確かに有効なバグのようですね。修正すべきです。ご報告ありがとうございます!
私の分析は以下の通りです。
# 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 がデータベースから削除されます。
![]()
総じて、HasCustomFields ミックスインでは、同じキーの symbol 版と string 版が異なって扱われます。
はい、実行しました。この問題に対処する PR です