Inkonsistentes Verhalten in der UserUpdater-Klasse

@eviltrout

Reproduktionsschritte:

  1. Erstellen wir ein Benutzerfeld mit der ID 1.
  2. Führen Sie die zweite Zeile des untenstehenden Codes zweimal aus.

Fall 1

up = UserUpdater.new(Discourse.system_user, User.find(1))
up.update({:custom_fields=>{:user_field_1=>"abc"}})
  1. Sie sehen abc zweimal, wenn Sie zu /my/preferences/profile navigieren.

Überraschenderweise funktioniert die Aktualisierung des Profils über /my/preferences/profile einwandfrei.

Fall 2

Dies scheint einwandfrei zu funktionieren

up = UserUpdater.new(Discourse.system_user, User.find(1))
params = ActionController::Parameters.new({:custom_fields=>{:user_field_1=>"abc"}})
up.update(params.permit!)

Was passiert, ist: Im Fall 1 wird der Wert in ein Array eingefügt und auf /my/preferences/profile als durch Kommas getrennte Werte angezeigt.

Fall 2 scheint das Richtige zu tun, d. h. den aktuellen Wert durch den neuen zu ersetzen, aber das Einpacken in ActionController::Parameters ist unnatürlich.

4 „Gefällt mir“

Das scheint tatsächlich ein gültiger Fehler zu sein, der behoben werden sollte. Danke, dass du ihn gemeldet hast!

4 „Gefällt mir“

Meine Analyse läuft auf Folgendes hinaus.

# Fall 1
u1 = User.find(1)
u1.custom_fields[:user_field_1] = "abc"
u1.save

# Fall 2
u1.custom_fields["user_field_1"] = "abc"
u1.save

Im Fall 1 wird bei jedem Aufruf von u1.save ein neues UserCustomField erstellt.

Im Fall 2 werden alle UserCustomField-Einträge mit dem Namen ‘user_field_1’ aus der Datenbank gelöscht, außer dem angegebenen.

Screenshot 2020-08-20 at 11.56.49 AM

Insgesamt werden die symbol- und string-Versionen desselben Schlüssels im HasCustomFields-Mixin unterschiedlich behandelt.

1 „Gefällt mir“

Ok, ich habe es gewagt. Hier ist der PR, der das Problem behebt

7 „Gefällt mir“

Okay, dieser ist also zusammengeführt.

3 „Gefällt mir“