2

イベントを管理する Rails アプリを作成しており、イベントが別のイベントと重複しているかどうかを確認するための検証を追加したいと考えています。

重複するイベントをチェックするためのカスタム検証コードは次のとおりです。

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

重複するイベントを作成することはできますが、それらはまだ保存されています。ここで何が間違っていますか?

4

1 に答える 1