2
我似乎不时遇到此问题,当我想验证一个字段,并将其范围限制为特定日期时,我正在存储日期时间。validates_uniqueness_of与日期时间
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'实现。 – Pavan