Créons un champ utilisateur dont l’identifiant est 1.
Exécutez deux fois la deuxième ligne du code ci-dessous.
Cas 1
up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>"abc"}})
Vous verrez abc deux fois lorsque vous accéderez à /my/preferences/profile.
Surprenamment, lorsque le profil est mis à jour via /my/preferences/profile, cela fonctionne parfaitement.
Cas 2
Cela semble fonctionner correctement
up = UserUpdater.new(Discourse.system_user, User.find(1))
params = ActionController::Parameters.new({:custom_fields=>{:user_field_1=>"abc"}})
up.update(params.permit!)
Ce qui se passe, c’est que dans le Cas 1, la valeur est ajoutée à un tableau et affichée sous forme de valeurs séparées par des virgules sur /my/preferences/profile.
Le Cas 2 semble faire la bonne chose, c’est-à-dire qu’il remplace la valeur actuelle par la nouvelle, mais l’encapsulation dans ActionController::Parameters est peu naturelle.