Массовое обновление информации о пользователях

Существует ли способ массового обновления информации о пользователях? Я хочу экспортировать данные для обновления пользователей (например, имя и т.д.), а затем импортировать их обратно в базу данных, обновив существующую информацию.

Я могу загрузить CSV-файл из панели администратора, но меня интересует, как вернуть эти данные обратно в Discourse.

Я вручную обновлял каждого пользователя на стороне администратора (поле «Имя»), но при повторном входе обновления оказываются пустыми.

Скорее всего, лучший способ — использовать API, хотя можно также написать скрипт, который прочитает ваш CSV-файл и обновит данные в Rails.

Вот задача Rake для обновления пользовательских полей, которую можно адаптировать для обновления других данных:


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

После модификации поместите файл в /var/www/discourse/lib/tasks внутри контейнера и выполните команду rake user_fields:import_csv["YOUR-CSV.csv"].

Если вам нужна помощь в адаптации скрипта под ваши задачи, отправьте мне свой CSV-файл (или хотя бы заголовки и несколько первых строк) по электронной почте, и я оценю объём работы.

Вот тот же скрипт на GitHub:

Обратите внимание, что на данный момент он работает только с пользовательскими полями пользователей, а не с полями, такими как имя.

Вероятно, это произошло потому, что вы не нажимали save в конце каждого редактирования. Это вопрос интерфейса, который было бы здорово решить в будущем!!

Работает ли это с колонками, в названиях которых есть пробелы, или поля должны содержать нижние подчеркивания? Также при экспорте заголовок первой колонки — id, а не user_id. Это проблема?

У них есть имена вроде user_field_1. Это в некоторой степени объясняется в репозитории GitHub, на который есть ссылка выше.

Скрипт не предназначен для обработки файла с данными пользователей. Вам потребуется изменить несколько заголовков столбцов. Кроме того, в текущем виде скрипт обновляет только элементы, хранящиеся в таблице custom_fields.