사용자가 소속된 프로젝트의 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 Internal Server Error"가 발생합니다.
아마도 시작 부분의 코드가 잘못된 것 때문일까요?
after_initialize do
add_model_callback(User, :before_save) do
validate_projectid_customfield
end
end
도움을 주시거나 올바른 문서를 알려주실 수 있을까요?
감사합니다!