Manipolazione di campi utente personalizzati dalla console Rails

Ho usato questo snippet di codice per tentare di sostituire in blocco alcuni dati in un campo personalizzato utente. L’ho derivato da l’importatore 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

Tuttavia, ha avuto la conseguenza indesiderata di cancellare i valori altri campi personalizzati degli utenti.

Qualcuno può suggerire un modo per modificare il valore di un campo personalizzato utente dalla console che non causi caos?

1 Mi Piace

Penso che questo formato cambi solo il campo personalizzato in questione. L’ho testato brevemente e sembrava funzionare. :+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

Tuttavia, se si desidera che il campo sia NULL anziché “Nil”, è possibile provare questo invece:

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 Mi Piace

Anche qualcosa del tipo

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

Oh, ma se ha già un valore, ne aggiungerà un secondo! Quindi potresti

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

e poi dovresti aggiornarlo o crearne uno nuovo.

Ma se crei più elementi, l’UX li mostrerà separati da virgola e se vengono modificati tramite l’UX al momento del salvataggio, vengono salvati nuovamente come un singolo valore.

Puoi darci un’occhiata con

  UserCustomField.all

O

UserCustomField.where(name: x)

Questo è a memoria dal mio telefono, quindi la tua esperienza potrebbe variare.

Facendo ciò, stai sostituendo tutto nell’hash u.custom_fields con {"user_field_16" => nil} (nota il nil senza virgolette)

Grazie, sì, è quello che avrei dovuto usare.

Sì, è esattamente quello che è successo. Mi sono sentito piuttosto sciocco dopo!

2 Mi Piace

Trovo questo uno strumento utile per ottenere la sintassi di Rails corretta quando si desidera manipolare questi UCF nella console di Rails:

Se stai sostituendo dati in quel campo
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(darà un errore se non ci sono ancora dati in quel campo)

Se stai compilando quel campo per la prima volta
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=",value: "=NewValue=")
7 Mi Piace

Come hai creato quel contenuto dinamico nel post?

Sembra che meta abbia questo componente attivo. (Sto solo ipotizzando)

3 Mi Piace

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