我有一个自定义用户字段,用于存储用户所属项目的 projectid。
目的:输入有效(付费)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]
# 如果值不在预定义列表中,则引发错误
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
有人能帮帮我或指引我到正确的文档吗?
谢谢!