Импорт пользовательского поля профиля из устаревшего программного обеспечения форума

Я хочу добавить пользовательское поле в скрипт импорта. Это поле представляет собой выпадающий список.

Я наткнулся на этот пост, где описывается, как создать такое поле в процессе импорта:

Это сработало, и поле было создано корректно с нужными опциями выпадающего списка.

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

  post_create_action: proc do |newuser|
    if user["legacy_custom_field"].is_a?(String)
      newuser.custom_fields = {"user_field_#{@legacy_field.id}" => user["legacy_custom_field"]}
    end
  end

Поле, которое я импортирую, является строкой, поэтому код должен выполняться. Однако при запуске импорта значение для этого поля не импортируется.

Значение user[“legacy_custom_field”] в этом примере идентично опциям, созданным для этого поля, но я не проверяю импортируемые данные на соответствие опциям выпадающего списка. Нужно ли мне это делать или, возможно, добавлять данные иначе, поскольку это выбор из выпадающего списка? Когда я изучил таблицу user_custom_fields, этот текст, похоже, всё равно хранится как простая строка.

Чего мне не хватает? Заранее спасибо, если кто-то сможет помочь! :+1:

Не совсем понятно, что не так с вашим кодом. Возможно, стоит посмотреть на импортер Ning, так как он работает с пользовательскими полями. Я бы добавил puts после if, чтобы проверить, выполняется ли этот блок кода вообще.

Возможно, потребуется вызвать newuser.save!, но я не думаю, что это обязательно.

Это было так же просто, как добавить newuser.save! после существующего кода.

Спасибо за подсказку! Теперь всё работает отлично.

@pfaffman, это странно. Ты когда-нибудь сталкивался с проблемой, когда newuser.save! отключает другие части скрипта импорта, если вызывать его слишком рано? Не завершает ли это что-то, что нужно перезапустить, чтобы остальная часть скрипта работала?

Я заметил, что как только добавил эту строку, аватары перестали импортироваться, но закомментирование этой строки снова позволило аватарам загружаться без проблем. Это было буквально единственное изменение, которое я внес для исправления проблемы с аватарами. При этом эти части скрипта совершенно разные. :thinking:

Может ли это быть связано с использованием newuser.save! вместо newuser.save без восклицательного знака в конце? Когда я завершаю несколько блоков кода newuser.save!, я заметил, что сохраняется только первый из них.