在自定义验证之前验证状态

时间:2012-10-20 18:41:26

标签: ruby-on-rails-3 validation activerecord activemodel

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(会议在一天内结束) 并且只能在当月创建会议。

1 个答案:

答案 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