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为零时。
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'
Afaik也可以用自定义验证器来实现它,但我想情况并非如此,因为每个类只有一个验证器,所以我应该为3个检查做三个类,不是吗? / p>
P.S。
应用程序具有带start_at和end_at DateTime类型的会议模型 属性,指示会议的开始和结束 分别。 我需要实现下一个逻辑 start_at< end_at(它比结束后开始) start_at.day == end_at.day(会议在一天内结束) 并且只能在当月创建会议。
答案 0 :(得分:1)
零检查会为你工作吗?
def event_takes_place_in_one_day
#only execute if start_at & end_at is not nil
unless self.start_at.nil? || self.end_at.nil?
binding.pry
self.start_at.day == self.end_at
end
end