2016-06-16 4 views
0

У меня возникла проблема с моей собственной проверкой. Существует таблица 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 также есть сообщение об ошибке предупреждение, что термин уже занят. Как это исправить?

+0

Я запутался. Вы говорите, что даже если данные проходят проверку, он все еще содержит '' У вас есть обучение в то же время. '' Ошибка ?! –

+0

@TomLord Да, это правильно, если я помещаю неверные данные, которые перекрываются с другим. У меня есть дважды сообщение об ошибке. У вас есть обучение в одно и то же время. Я полагаю, что проверка выполняется в два раза. –

+0

Как вы сохраняете данные и вызываете этот валидатор? Вы делаете что-нибудь смешное, например 'update_attributes', или' save (validate: false) ', или вызываете валидатор несколько раз, .....? –

ответ

2

Согласно doc, погрешности должны быть errors[: attribute] или errors[:base].

Поскольку не является имена атрибутов error, валидатор будет игнорировать эту строку

errors.add(:error, 'You have a training in the same time.') 

Попробуйте

errors.add(:base, 'You have a training in the same time.') 

http://guides.rubyonrails.org/active_record_validations.html#errors