【发布时间】:2016-11-07 12:02:02
【问题描述】:
当我想在存储日期时间时验证字段并将其范围限定为特定日期时,我似乎不时遇到此问题。
validates_uniqueness_of :user_id, scope: [:starts_at, :state]
问题是starts_at 存储为datetime,但我不想验证确切时间,而是要验证一般日期。
当我遇到这个问题时,我通常会创建一个自定义验证方法,有时在有时间窗口时这很有意义,但我想知道当我只关心整个日期时是否忽略了更好的解决方案。
如果有另一种可能性,我想避免创建如下所示的自定义验证。
老办法
def check_user_uniqueness
if EventLog.where("start_at::date = ? AND id <> ? AND user_id = ?",
start_at.to_date, id, user_id).count > 0
errors.add(:user_id, "isn't available on this date")
end
end
谢谢
【问题讨论】:
-
我只能为此想到一个自定义验证。如果
starts_at是一个日期(不是日期时间),那么它可以通过validates_uniqueness_of来实现。
标签: ruby-on-rails validation datetime ruby-on-rails-4 activerecord