【问题标题】:Validate presence before custom validation在自定义验证之前验证存在
【发布时间】:2012-10-20 18:41:25
【问题描述】:
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'

Afaik 也可以使用自定义验证器来实现这一点,但我认为情况并非如此,因为每个类只有一个验证器,所以我应该为 3 个检查做三个类,不是吗?

附言

应用程序有一个带有 start_at 和 end_at DateTime 类型的会议模型 属性,指示会议的开始和结束 分别。 我需要实现下一个逻辑 start_at

【问题讨论】:

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


    【解决方案1】:

    nil 检查对你有用吗?

    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
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2013-05-19
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多