ruby-on-rails-3 - 在自定义验证之前验证存在

标签 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 个检查做三个类,不是吗?

附言

应用程序有一个 session 模型,具有 start_at 和 end_at DateTime 类型
属性,指示 session 的开始和结束
分别。
我需要实现下一个逻辑
start_at < end_at(它在结束之后开始)
start_at.day == end_at.day( session 在一天内结束)
并且 session 只能为当月创建。

最佳答案

零支票对你有用吗?

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

关于ruby-on-rails-3 - 在自定义验证之前验证存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991522/

相关文章:

ruby-on-rails - 正确的 rails 型号是什么?建议使用冗余?

ruby-on-rails - 设计邀请: Optionally Send Email

forms - HTML5 - 验证消息

ruby-on-rails - 查找不包含 has_many :through association 的记录

ruby-on-rails-3 - Rails 3/Device - 更改密码重置的错误消息

ruby-on-rails - 如何绕过 Facebook Canvas 应用程序的 Rails 3 中的 protect_from_forgery?

mysql - Rails 中的复杂 MySQL 查询

ruby-on-rails-3 - 是否有相当于 ActiveRecord::Relation.update_all 的东西可以触发回调/观察者?

php - Symfony 可选约束未按预期工作

java - 有没有办法在存储到数据库之前检查 ISBN 号是否有效