2

私はdatetimeを格納しているときに特定の日付にフィールドとスコープを検証したいときに、時々この問題が発生するようです。validates_uniqueness_of with datetime

validates_uniqueness_of :user_id, scope: [:starts_at, :state] 

問題がstarts_atdatetimeとして格納されているが、私は正確な時間ではなく、一般的な日付を検証する必要はありません。

この問題が発生したときは、通常、カスタム検証方法を作成します。時には時間枠がある場合には意味がありますが、日付全体のみを気にすると、 。

別の可能性がある場合は、以下のようなカスタム検証を作成しないようにしたいと思います。

古い方法

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 

おかげ

+0

私はこれについて**カスタム検証**と考えることができます。 'starts_at'が** date(datetimeでない)**の場合、' validates_uniqueness_of'で達成できます。 – Pavan

答えて

1

このためのカスタム検証を作成するために、非常に合理的ですが、あなただけではなく、それは、より読みやすいとし、exists?代わりのcount/> 0チェックを使用することができます正確に何が必要ですか:

def check_user_uniqueness 
    if EventLog.where(id: id, user_id: user_id).exists?("start_at::date = ?", start_at.to_date) 
    errors.add(:user_id, "isn't available on this date") 
    end 
end 
関連する問題