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
が、この方法に問題があり、その用語は、すでに忙しい。それを修正するには?
私は混乱しているお試しください。このライン
を無視します。データにバリデーションが渡されたとしても、「あなたは同じ時間にトレーニングを受けています。」というエラーが含まれています。 –
@TomLordはい、私は無効なデータをフォームに入れて、別のものと重複しています。私は2回エラーメッセージが出ます。同じ時間にトレーニングがあります。私は、検証が2回実行されることを約束します。 –
どのようにデータを保存し、このバリデータを呼び出していますか? 'update_attributes'や' save(validate:false) 'や、バリデーターを複数回呼び出すなど面白いことはありますか? –