fzngagan
(Faizaan Gagan)
1
@eviltrout
Pasos para reproducir:
- Creemos un campo de usuario con el id
1.
- Ejecute la segunda línea del código siguiente dos veces.
Caso 1
up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>"abc"}})
- Verá
abc dos veces al ir a /my/preferences/profile
Sorprendentemente, cuando el perfil se actualiza mediante /my/preferences/profile, funciona perfectamente.
Caso 2
Esto parece funcionar bien
up = UserUpdater.new(Discourse.system_user, User.find(1))
params = ActionController::Parameters.new({:custom_fields=>{:user_field_1=>"abc"}})
up.update(params.permit!)
Lo que ocurre es que, en el Caso 1, el valor se añade a un array y se muestra como valores separados por comas en /my/preferences/profile.
El Caso 2 parece hacer lo correcto, es decir, reemplaza el valor actual con el nuevo, pero envolverlo en ActionController::Parameters no es natural.
4 Me gusta
eviltrout
(Robin Ward)
3
Eso parece ser un error válido y debería solucionarse. ¡Gracias por informarlo!
4 Me gusta
fzngagan
(Faizaan Gagan)
5
Mi análisis se reduce a lo siguiente.
# caso 1
u1 = User.find(1)
u1.custom_fields[:user_field_1] = "abc"
u1.save
# caso 2
u1.custom_fields["user_field_1"] = "abc"
u1.save
En el caso 1, se crea un nuevo UserCustomField por cada llamada a u1.save.
En el caso 2, todos los UserCustomField con el nombre ‘user_field_1’ se eliminan de la base de datos, excepto el especificado.

En resumen, las versiones con símbolo y cadena de la misma clave se tratan de manera diferente en el mixin HasCustomFields.
1 me gusta
fzngagan
(Faizaan Gagan)
6
Ok, me lancé. Aquí está el PR que soluciona el problema
7 Me gusta
fzngagan
(Faizaan Gagan)
7
Ok, así que este ya está fusionado.
3 Me gusta