У меня есть пользовательское поле для хранения 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
Может ли кто-нибудь помочь или направить к правильной документации?
Спасибо!