Manipulieren benutzerdefinierter Felder aus der Rails console

Ich habe diesen Codeausschnitt verwendet, um zu versuchen, einige Daten in einem benutzerdefinierten Benutzerfeld massenhaft zu ersetzen. Ich habe ihn vom Ning-Importer abgeleitet.

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields = {"user_field_16" => "Nil"}
  u.save
end

Dies hatte jedoch die unbeabsichtigte Folge, dass die anderen benutzerdefinierten Feldwerte der Benutzer gelöscht wurden.

Kann mir jemand eine Möglichkeit vorschlagen, einen benutzerdefinierten Benutzerfeldwert von der Konsole aus zu ändern, ohne Chaos zu verursachen?

1 „Gefällt mir“

Ich glaube, dieses Format ändert nur das betreffende benutzerdefinierte Feld. Ich habe es kurz getestet und es schien den Zweck zu erfüllen. :+1:

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields["user_field_16"] = "Nil"
  u.save
end

Wenn Sie jedoch möchten, dass das Feld NULL statt „Nil“ lautet, können Sie stattdessen Folgendes versuchen:

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields["user_field_16"] = NIL
  u.save
end
4 „Gefällt mir“

Auch so etwas wie

UserCustomField.create(user_id: 1, name: "user_field_4",value: "Oops")

Oh, aber wenn das bereits einen Wert hat, wird ein zweiter hinzugefügt! Sie könnten also

ucf=UserCustomField.find_by(user_id: name: 'user_field_4')

und dann müssten Sie es entweder aktualisieren oder ein neues erstellen.

Wenn Sie jedoch mehrere erstellen, zeigt die Benutzeroberfläche sie durch Kommas getrennt an, und wenn sie über die Benutzeroberfläche bearbeitet werden, werden sie beim Speichern wieder als einzelner Wert gespeichert.

Sie können sie sich ansehen mit

UserCustomField.all

Oder

UserCustomField.where(name: x)

Das ist aus dem Gedächtnis auf meinem Handy, also kann es sein, dass es Abweichungen gibt.

Wenn Sie dies tun, ersetzen Sie alles im u.custom_fields-Hash durch {"user_field_16" => nil} (beachten Sie das nil ohne Anführungszeichen)

Danke – ja, das hätte ich verwenden sollen.

Yup, genau das ist passiert. Ich habe mich danach ziemlich dumm gefühlt!

2 „Gefällt mir“

Ich finde dies ein nützliches Werkzeug, um die Rails-Syntax richtig hinzubekommen, wenn Sie diese UCFs in der Rails-Konsole bearbeiten möchten:

Wenn Sie Daten in diesem Feld ersetzen
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(gibt einen Fehler aus, wenn noch keine Daten in diesem Feld vorhanden sind)

Wenn Sie dieses Feld zum ersten Mal befüllen
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=", value: "=NewValue=")
7 „Gefällt mir“

Wie haben Sie diese dynamischen Inhalte in dem Beitrag erstellt?

Es scheint, dass Meta diese Komponente aktiviert hat. (Nur eine Vermutung)

3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.