Больше нельзя создавать новые аккаунты из-за старого плагина multi-select user field

Ему повезло, что я живу совсем рядом :wink:.

Формат данных был интересным — он существовал в двух разных видах, которые однажды изменились. Изначально они выглядели так:

this
that

А в один день внезапно превратились в:

this,that

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

Хотя я думаю, что могу обойти это ограничение или взломать систему, чтобы выполнить задачу:

Первый проход: все пользователи с одним значением с использованием существующего скрипта.
Второй проход: все пользователи с несколькими значениями с использованием модифицированного скрипта, который принудительно создает новые строки.

позже…
Мой хитрый план сработал.

Вот модифицированный скрипт для второго прохода:

# frozen_string_literal: true

require "csv"
desc "Импорт пользовательских полей"
task "multi_user_fields:import_csv", [:filename] => [:environment] do |_, args|

  puts "Имя файла: #{args[:filename]}"
  data = CSV.read(args[:filename], headers: true );

  data.each_entry do |row|
    puts "Обработка строки."
    row.to_h.each do |x|
      user_id = row['user_id']
      if x.first == 'user_id'
        u = User.find(user_id)
        puts "Найден пользователь: #{u.username}"
      else
        name = x.first
        val = row[x.first]
        ucf = UserCustomField.find_by(user_id: row['user_id'], name: name)
          if val
            puts "Создание UCF: #{row['user_id']} Имя: #{name}, значение: #{val}"
            UserCustomField.create(user_id: user_id, name: name, value: val)
          end
      end
    end
  end
end

@pfaffman — насколько сложно будет обновить сам скрипт, чтобы он поддерживал поля с множественным выбором для тех, кто в будущем будет работать с пользовательскими полями (UCF)?