2016-06-16 3 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は別のトレーニングスローエラーと重なります。新しい日付と時刻は(重複しない)、合格メソッドを作成し、警告、エラーメッセージがあるdatabase.butまた新しいトレーニングを追加正しいかどうので

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 

が、この方法に問題があり、その用語は、すでに忙しい。それを修正するには?

+0

私は混乱しているお試しください。このライン

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

を無視します。データにバリデーションが渡されたとしても、「あなたは同じ時間にトレーニングを受けています。」というエラーが含まれています。 –

+0

@TomLordはい、私は無効なデータをフォームに入れて、別のものと重複しています。私は2回エラーメッセージが出ます。同じ時間にトレーニングがあります。私は、検証が2回実行されることを約束します。 –

+0

どのようにデータを保存し、このバリデータを呼び出していますか? 'update_attributes'や' save(validate:false) 'や、バリデーターを複数回呼び出すなど面白いことはありますか? –

答えて

関連する問題