validates :place_id, :title, :level, :start_at, :end_at, :presence => true
validate :event_takes_place_in_one_day, :event_is_not_in_past
def event_takes_place_in_one_day
binding.pry
self.start_at.day == self.end_at
end
そしてバン!エラー、start_at または end_at が nil の場合。
undefined method `to_datetime' for nil:NilClass
-
app/models/meeting.rb:22:in `cover?'
app/models/meeting.rb:22:in `event_is_not_in_past'
app/controllers/meetings_controller.rb:18:in `create'
これをカスタムバリデータで実装することもできますが、クラスごとにバリデータが1つしかないため、そうではないと思います.3つのチェックに対して3つのクラスを実行する必要がありますね。
Ps
アプリケーションには、会議の開始と終了をそれぞれ示す start_at と end_at DateTime タイプの属性を持つ会議モデルがあります。次のロジックを実装する必要があります start_at < end_at (終了より後に開始する) start_at.day == end_at.day (会議は 1 日以内に終了します) また、会議は当月のみ作成できます。