Manipulation des champs utilisateur personnalisés depuis la console Rails

J’ai utilisé cet extrait de code pour tenter de remplacer en masse des données dans un champ personnalisé d’utilisateur. Je l’ai dérivé de l’importateur Ning.

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

Cependant, cela a eu pour conséquence involontaire d’effacer les autres valeurs des champs personnalisés des utilisateurs.

Quelqu’un peut-il suggérer une façon de modifier la valeur d’un champ personnalisé d’utilisateur depuis la console sans causer de chaos ?

1 « J'aime »

Je pense que ce format ne modifie que le champ personnalisé en question. Je l’ai testé brièvement, et il a semblé faire l’affaire. :+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

Cependant, si vous vouliez que le champ soit NULL plutôt que de dire « Nil », vous pourriez essayer ceci à la place :

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 « J'aime »

Aussi quelque chose comme

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

Oh, mais si cela a déjà une valeur, il en ajoutera une deuxième ! Donc, vous pourriez

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

et ensuite vous devriez soit le mettre à jour, soit en créer un nouveau.

Mais si vous en créez plusieurs, l’UX les affichera séparés par des virgules, et s’ils sont modifiés via l’UX, lors de leur enregistrement, ils seront enregistrés comme une seule valeur.

Vous pouvez les consulter avec

  UserCustomField.all

Ou

UserCustomField.where(name: x)

C’est de mémoire sur mon téléphone, donc votre expérience peut varier.

En faisant cela, vous remplacez tout dans le hash u.custom_fields par {\"user_field_16\" =\u003e nil} (notez le nil sans guillemets)

Merci - oui, c’est ce que j’aurais dû utiliser.

Oups, c’est exactement ce qui s’est passé. Je me suis senti assez idiot après coup !

2 « J'aime »

Je trouve que c’est un outil utile pour obtenir la bonne syntaxe Rails lorsque vous souhaitez manipuler ces UCF dans la console Rails :

Si vous remplacez des données dans ce champ
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(cela générera une erreur s’il n’y a pas encore de données dans ce champ)

Si vous remplissez ce champ pour la première fois
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=",value: "=NewValue=")
7 « J'aime »

Comment avez-vous créé ce contenu dynamique dans la publication ?

Il semble que meta ait ce composant activé. (Je suppose

3 « J'aime »

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