Esiste un modo per aggiornare le informazioni dell’utente in blocco? Quello che vorrei fare è esportare le informazioni di aggiornamento dei dati utente come nome ecc. e poi reimportarle nel database, aggiornando le informazioni esistenti.
Posso scaricare un CSV dal pannello di amministrazione, ma mi stavo chiedendo come potrei reinserire quelle informazioni su Discourse.
Stavo aggiornando meticolosamente ogni utente sul lato amministrativo (campo Nome) ma quando torno indietro gli aggiornamenti appaiono vuoti.
Il modo migliore è probabilmente con l’API, anche se potresti farlo anche con uno script che legga il tuo CSV e lo aggiorni in Rails.
Ecco un rake task che aggiorna campi utente personalizzati che potrebbero essere modificati per aggiornare altre cose:
require "csv"
desc "Import user fields"
task "user_fields:import_csv", [:filename] => [:environment] do |_, args|
puts "Filename: #{args[:filename]}"
data = CSV.read(args[:filename], headers: true );
data.each_entry do |row|
puts "doing row."
row.to_h.each do |x|
user_id = row['user_id']
if x.first == 'user_id'
u = User.find(user_id)
puts "Got user: #{u.username}"
else
name = x.first
val = row[x.first]
ucf = UserCustomField.find_by(user_id: row['user_id'], name: name)
if ucf
if val != ucf.value
puts "Updating UCF: #{row['user_id']} Name: #{name}, Found #{ucf.value}}"
ucf.update(value: val)
end
else
if val
puts "Creating UCF: #{row['user_id']} Name: #{name}, value: #{val}"
UserCustomField.create(user_id: user_id, name: name, value: val)
end
end
end
end
end
end
Dopo averlo modificato, lo metteresti in /var/www/discourse/lib/tasks all’interno del container e rake user_fields:import_csv["YOUR-CSV.csv"]
Se hai bisogno di aiuto per modificarlo per le tue esigenze, inviami via email il tuo CSV (o almeno gli header e le prime righe) e ti fornirò un preventivo.
Si prega di notare che al momento esegue solo i campi personalizzati dell’utente, non campi come il nome.
Probabilmente è stato perché non hai premuto salva alla fine di ogni modifica. È una cosa dell’interfaccia utente che sarebbe bello vedere affrontata un giorno!!
Funziona con colonne che contengono spazi o i campi dovrebbero avere underscore? Inoltre, quando esportato, l’intestazione della prima colonna è id e non user_id. È un problema?
Lo script non è progettato per consumare il download dei dati utente. Dovrai modificare diverse intestazioni di colonna. Inoltre, nella sua forma attuale, lo script aggiorna solo gli elementi archiviati nella tabella custom_fields.