Шаги для воспроизведения:
- Создадим поле пользователя с идентификатором
1. - Запустите вторую строку приведенного ниже кода дважды.
Случай 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’, кроме указанной.
![]()
В целом, версии ключа в виде символа и строки в миксине HasCustomFields обрабатываются по-разному.
Ладно, я рискнул. Вот PR, который исправляет проблему
Окей, этот уже слит.