Наличие большого количества проверок - неплохая практика. В какой-то момент вы можете захотеть переместить его в класс валидатора.
class Training < ApplicationRecord
validates_with TrainingValidator
end
Одна проблема, которую я вижу с тем, что у вас есть, состоит в том, что last_registration_date
может быть установлено и maximum_users
равно нулю, но ваш maximum_users
Приведенная выше проверка может не разрешить ноль.
app/models/concerns/traning_validator.rb
classTrainingValidator < ActiveModel::Validator
def validate(training)
if training.last_registration_date_changed? && training.last_registration_date < Time.now.utc
training.errors.add(:training, "can't be in the past")
end
unless training.last_registration_date.nil? || training.maximum_users.nil?
training.errors.add(:last_registration_date, "last_registration_date cannot both be set when maximum_users is set")
end
unless training.maximum_users.nil? || training.maximum_users < 999
training.errors.add(:maximum_users, "must be less than 999")
end
end
end