مكون إضافي للتحقق من قيمة حقل مخصص من نوع نص

لدي حقل مستخدم مخصص للاحتفاظ بمعرف المشروع الذي ينتمي إليه المستخدم.

الغرض: المستخدم الذي يدخل معرف مشروع صالح (مدفوع) لديه حق الوصول إلى فئات المحتوى الغني.

التحقق مما إذا كان معرف المشروع الذي أدخله المستخدم يتوافق مع معرف مشروع موجود أمر سهل إلى حد ما:

# تعريف الطريقة للتحقق من الحقل المخصص
def validate_projectid_customfield
  # مفتاح الحقل المخصص وقائمة محددة مسبقًا
  custom_field_key = 'projectid'
  predefined_list = ["558", "963", "819"]

  # الحصول على قيمة الحقل المخصص للمستخدم
  user_field_value = self.custom_fields[custom_field_key]

  # إذا لم تكن القيمة في القائمة المحددة مسبقًا، قم بإثارة خطأ
  if !user_field_value.nil? && !user_field_value.empty?
    unless predefined_list.include?(user_field_value)
      # إثارة خطأ تحقق سيفهمه Discourse
      WHAT TO DO HERE?
    end
  end
end

في الوقت الحالي، لدي الكود التالي بدلاً من “WHAT TO DO HERE؟”

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

لكن هذا لا يبدو أنه يعمل.

إذا قمت بأخذ صفحة الملف الشخصي وملء قيمة (صحيحة أو خاطئة)، يتفاعل النظام أولاً مع “تم الحفظ!” متبوعًا فورًا بـ “500 خطأ داخلي في الخادم”.

ربما يكون كل هذا بسبب الكود الخاطئ في البداية؟

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

هل يمكن لأي شخص مساعدتي أو توجيهي إلى الوثائق الصحيحة؟

شكرًا!

أنا متأكد من أن هذا الجزء من التعليمات البرمجية هو ما يسبب خطأ الخادم الداخلي 500:

هل هناك أي شخص يمكنه إخباري بكيفية الوصول إلى قيمة حقل المستخدم لحقل مخصص؟

قطع أخرى من التعليمات البرمجية لا تعمل أيضًا:

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

أي أفكار / إشارات إلى وثائق أو تعليمات برمجية؟