2
이벤트를 관리하기위한 레일 앱을 만들고 이벤트가 다른 이벤트와 겹치는 지 확인하기 위해 유효성 검사를 추가하고 싶습니다.레일 사용자 정의 유효성 검사는 오류가 있지만 여전히 저장하고 있습니까?
다음은 중복 이벤트를 확인하기 위해 내 사용자 지정 유효성 검사 코드입니다 : 난 아직도 중복되는 이벤트를 만들 수 있으며, 그들은 여전히 저장되고있는
class Event < ActiveRecord::Base
attr_accessible :full_date, :start_hour, :end_hour, :address
validate :no_overlapping_events
def no_overlapping_events
overlap = false
same_date = Event.where(:full_date => self.full_date).where("id != ?", self.id).where(:address => self.address)
same_date.each do |t|
if self.start_hour <= t.start_hour
if self.end_hour >= t.start_hour
overlap = true
break
end
end
end
if overlap == true
errors.add(:base, "Can't have overlapping events!")
end
end
end
. 여기서 내가 뭘 잘못하고 있니?
내가 끝을 추가하지만 여전히 말아야 때 절약 할 수 있습니다. 나는 어떻게 내가 논리 오류를 만들고 있는지 보지 못한다. 예를 들어, e2.start_hour e1.start_hour. 즉, e2는 e1 이전에 시작하지만 e2의 종료 시간은 e1의 시작 시간과 종료 시간 사이입니다. –
dexx1220
나는 당신이 "겹치는"것을 정의하는 것에 달려 있다고 생각합니다, 그래서 그 부분을 무시해도 좋습니다. 결국, 끝을 추가하기보다는'same_date = Event.where ... '줄 다음에있는 것을 제거하십시오. 그러나 나는 당신이 그렇게했거나 구문 오류가 있다고 생각합니다. 어쨌든 그렇게 할 수 있니? – Adnan
나는 방금했다. 전체 코드는 완료되지 않았으며 일부만 완료했습니다. 더 많은 논리를 추가하고 싶지만 먼저 하나의 사례 만 테스트하려고합니다. 이상한 점은 저장된 레코드를 편집하여 겹치는 시간 슬롯을 지정하려고하면 유효성 검증이 실제로 시작되어 오류가 발생한다는 것입니다. 그러나 새 레코드를 만들려고 할 때 유효성 검사가 시작되지 않습니다. – dexx1220