Нестабильное поведение в классе UserUpdater

@eviltrout

Шаги для воспроизведения:

  1. Создадим поле пользователя с идентификатором 1.
  2. Запустите вторую строку приведенного ниже кода дважды.

Случай 1

up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>

Это действительно похоже на валидный баг, и его нужно исправить. Спасибо, что сообщили о нём!

Мой анализ сводится к следующему.

# случай 1
u1 = User.find(1)
u1.custom_fields[:user_field_1] = "abc"
u1.save

# случай 2
u1.custom_fields["user_field_1"] = "abc"
u1.save

В случае 1 при каждом вызове u1.save создается новая запись UserCustomField.

В случае 2 из базы данных удаляются все записи UserCustomField с именем ‘user_field_1’, кроме указанной.
Screenshot 2020-08-20 at 11.56.49 AM

В целом, версии ключа в виде символа и строки в миксине HasCustomFields обрабатываются по-разному.

Ладно, я рискнул. Вот PR, который исправляет проблему

Окей, этот уже слит.