У меня возникла проблема с моей собственной проверкой. Существует таблица individual_trainings.Проверка таблицы на временные перекрытия
# Table name: individual_trainings
#
# id :integer not null, primary key
# date_of_training :date not null
# client_id :integer
# trainer_id :integer
# end_on :time not null
# training_cost_id :integer
# start_on :time not null
Я хочу создать метод проверки, который проверяет, если клиент имеет другое обучение в том же день и время start_on, end_on перекрывается с другой ошибкой обучения броска.
def client_individual_training_validation
client.individual_trainings_as_client.where('date_of_training = ?', date_of_training).each do |ci|
if (start_on...end_on).overlaps?(ci.start_on...ci.end_on)
errors.add(:error, 'You have a training in the same time.')
end
end
end
Существует проблема с этим методом, потому что если новая дата и время правильно (не пересекаются), метод создания проходит и добавить новое обучение в database.but также есть сообщение об ошибке предупреждение, что термин уже занят. Как это исправить?
Я запутался. Вы говорите, что даже если данные проходят проверку, он все еще содержит '' У вас есть обучение в то же время. '' Ошибка ?! –
@TomLord Да, это правильно, если я помещаю неверные данные, которые перекрываются с другим. У меня есть дважды сообщение об ошибке. У вас есть обучение в одно и то же время. Я полагаю, что проверка выполняется в два раза. –
Как вы сохраняете данные и вызываете этот валидатор? Вы делаете что-нибудь смешное, например 'update_attributes', или' save (validate: false) ', или вызываете валидатор несколько раз, .....? –