Atualizar informações do usuário em massa

Existe uma maneira de atualizar as informações do seu usuário em massa? O que eu quero fazer é exportar as informações de atualização de dados do usuário, como nome, etc., e depois importá-las de volta para o banco de dados, atualizando as informações existentes.

Posso baixar um CSV do painel de administração, mas estou me perguntando como eu traria essas informações de volta para o Discourse.

Eu estava atualizando meticulosamente cada usuário no lado administrativo (campo Nome), mas quando volto, as atualizações aparecem em branco.

1 curtida

A melhor maneira é provavelmente com a API, embora você também possa fazer isso com um script que leria seu CSV e o atualizaria no Rails.

Aqui está uma tarefa rake que atualiza campos personalizados de usuário que poderiam ser modificados para atualizar outras coisas:


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

Depois de modificá-lo, você o colocaria em /var/www/discourse/lib/tasks dentro do contêiner e executaria rake user_fields:import_csv["SEU-CSV.csv"]

Se precisar de ajuda para modificá-lo para suas necessidades, envie-me seu CSV por e-mail (ou pelo menos os cabeçalhos e as primeiras linhas) e eu lhe darei um orçamento.

3 curtidas

Aqui está o mesmo script no GitHub:

Por favor, note que no momento ele só faz campos personalizados de usuário - não campos como nome.

Isso provavelmente aconteceu porque você não clicou em salvar no final de cada edição. É uma coisa da interface do usuário que seria bom ver resolvida um dia!!

1 curtida

Funciona com colunas que contêm espaços ou os campos devem ter underscores? Além disso, quando exportado, o cabeçalho da primeira coluna é id e não user_id. Isso é um problema?

Eles têm nomes como user_field_1. Isso é um pouco explicado no repositório do GitHub vinculado acima.

O script não foi projetado para consumir o download de dados do usuário. Você precisará modificar vários dos cabeçalhos das colunas. Além disso, em sua forma atual, o script apenas atualiza itens armazenados na tabela custom_fields.