Плагин для проверки значения пользовательского поля текстового типа

У меня есть пользовательское поле для хранения projectid проекта, участником которого является пользователь.

Цель: пользователь, введший корректный (платный) projectid, получает доступ к категориям с расширенным контентом.

Проверка того, соответствует ли введенный пользователем projectid существующему, довольно проста:

# Определите метод для проверки пользовательского поля
def validate_projectid_customfield
  # Ключ пользовательского поля и предопределенный список
  custom_field_key = 'projectid'
  predefined_list = ["558", "963", "819"]
  
  # Получите значение пользовательского поля
  user_field_value = self.custom_fields[custom_field_key]

  # Если значение не пустое и не nil
  if !user_field_value.nil? && !user_field_value.empty?
    unless predefined_list.include?(user_field_value)
      # Вызовите ошибку валидации, которую понимает Discourse
      ЧТО ЗДЕСЬ СДЕЛАТЬ?  
    end
  end
end

В данный момент вместо “ЧТО ЗДЕСЬ СДЕЛАТЬ?” у меня следующий код:

self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)

Но это, похоже, не работает.

Если я открою страницу профиля и введу значение (правильное или нет), система сначала сразу выдает “Сохранено!”, а затем следует “500 Internal Server Error”.

Возможно, проблема в неправильном коде в начале?

after_initialize do
  add_model_callback(User, :before_save) do
    validate_projectid_customfield
  end
end

Может ли кто-нибудь помочь или направить к правильной документации?

Спасибо!

Я точно знаю, что именно этот фрагмент кода вызывает ошибку 500 Internal Server Error:

Есть ли кто-нибудь, кто сможет подсказать, как получить значение пользовательского поля для настраиваемого поля?

Другие фрагменты кода, которые тоже не работают:

custom_field_value = self.user.reload.custom_fields[custom_field_key]
custom_field_value = UserCustomField.where(user_id: self.user.id, name: custom_field_key).pluck(:value).first

Есть какие-нибудь идеи или ссылки на документацию или код?